2015-08-20 74 views
5

我試圖運行在Spring-XD作業時,位於以下路徑:彈簧XD不讀logback.xml

/spring-xd/xd/modules/job/MyJobName (I'll call this path MyJobName below) 

我的罐子,位於MyJobName/lib下,包含在其根路徑文件logback.xml。不幸的是,Spring-XD似乎完全忽略了這個文件。當我通過IDE(IntelliJ)運行作業時,日誌記錄工作正常,但是當我使用Spring-XD運行它時,它完全忽略了我的SiftingAppender。

這裏是我的logback.xml文件看起來像:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%5p %-25logger{25} %m %n</pattern> 
     </encoder> 
    </appender> 

    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> 
     <discriminator> 
      <key>publication.run.id</key> 
      <defaultValue>unknown</defaultValue> 
     </discriminator> 
     <sift> 
      <appender name="FILE-${publication.run.id}" class="ch.qos.logback.core.FileAppender"> 
       <file>/data/${publication.run.id}/logs/process.log</file> 
       <append>true</append> 
       <layout class="ch.qos.logback.classic.PatternLayout"> 
        <pattern>%5p %-25logger{25} %m %n</pattern> 
       </layout> 
      </appender> 
     </sift> 
    </appender> 

    <logger name="com.bitwiseor"> 
     <level value="INFO" /> 
    </logger> 

    <logger name="org.springframework"> 
     <level value="INFO" /> 
    </logger> 

    <root> 
     <level value="INFO" /> 
     <appender-ref ref="SIFT" /> 
     <appender-ref ref="CONSOLE" /> 
    </root> 
</configuration> 

我想把這個logback.xml下的文件/彈簧XD/XD /配置,或在其他配置文件夾,但沒有我嘗試工作。我試着翻閱Spring-XD文檔,但什麼都沒發現。

任何有識之士將不勝感激。

+0

你可以添加一些關於你的application.properties的信息嗎?以及你如何開始你的工作?它可能是,運行時環境不知道,你的logback.xml的位置 – duffy356

+0

也確保,當你開始你的工作時,logback在你的類路徑中 – duffy356

回答

6

你必須把的logback 直接在classpath。請參閱here

Logback可以通過編程或通過以XML或Groovy格式表示的配置腳本進行配置。順便說一句,現有的log4j用戶可以使用我們的PropertiesTranslator網絡應用程序將他們的log4j.properties文件轉換爲logback.xml。

讓我們首先討論的是對的logback初始化步驟如下嘗試進行自我配置:

  • 的logback試圖找到一個名爲logback.groovy在classpath文件。

  • 如果沒有找到這樣的文件,的logback試圖找到一個名爲的logback-的test.xml在classpath文件。

  • 如果沒有找到這樣的文件,它會檢查在classpath中文件logback.xml。

  • 如果找不到這樣的文件,並且正在執行的JVM具有ServiceLoader(JDK 6及更高版本),ServiceLoader將用於解析com.qos.logback.classic.spi.Configurator的實現。找到的第一個實現將被使用。有關更多詳細信息,請參閱ServiceLoader文檔。

  • 如果沒有以上成功,的logback配置自身自動使用,這將導致日誌輸出被引導到控制檯BasicConfigurator。

這聽起來好像你的配置文件是在類路徑沒有。通常,在大多數框架中,缺省情況下config目錄不在類路徑中,在很多情況下,它的/config/<files>位於類路徑中,並且在使用ClassLoader加載它們時必須用/config/name指定它們。但是,Logback不會這樣做,因此如果要將文件存儲在config目錄中,則必須手動加載它們。

本質上,您可以告知JoranConfigurator從類路徑中的自定義位置加載文件,處理錯誤等等,以確保找到了您的文件。請參閱here for more details.

以下是我如何加載Logback配置,您可能可以將其調整爲適合您的系統。在這種情況下,resource是您的類路徑中到您決定放置logback.xml文件的任何位置的路徑。在這種情況下,它可能是/spring-xd/xd/config/logback.xml

public class LogbackConfigurator { 
    private static final Logger LOG = 
      LoggerFactory.getLogger(LogbackConfigurator.class); 

    public static boolean configure(String resource) throws JoranException { 
     final InputStream configInputStream = LogbackConfigurator.class.getResourceAsStream(resource); 
     final LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 

     JoranConfigurator configurator = new JoranConfigurator(); 
     configurator.setContext(loggerContext); 
     // the context was probably already configured by default configuration rules 
     loggerContext.reset(); 

     if(configInputStream != null) { 
      try { 
       configurator.doConfigure(configInputStream); 
      } catch (JoranException e) { 
       e.printStackTrace(); 
      } 
      StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext); 
      return true; 
     } else { 
      LOG.error("Unable to find logback file: {}", resource); 
      StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext); 
      return false; 
     } 
    } 
} 

通常情況下,這種方法將被稱爲在main第一線之一的東西,如:

LogbackConfigurator.configure(path); 

一旦該類已運行,您的logback應配置爲,如果對系統進行過能夠正常找到配置文件。請注意,如果您不想將位置硬編碼到系統中,您還可以使用-Dproperty=valueSystem.getProperties().get(keyname)來動態指定logback文件路徑的備用位置。

您也可以配置位置在Spring配置被注入,但我個人不建議像平時一樣登錄進行配置之前注射發生,所以如果在注射期間發生的任何事件記錄,他們將被正確記錄。

4

好像你的logback配置是有一些小問題。

嘗試把下面的配置到應用程序的類路徑;應該解決問題。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%5p %-25logger{25} %m %n</pattern> 
     </encoder> 
    </appender> 
    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> 
     <discriminator> 
      <key>publication.run.id</key> 
      <defaultValue>unknown</defaultValue> 
     </discriminator> 
     <sift> 
      <appender name="FILE-${publication.run.id}" class="ch.qos.logback.core.FileAppender"> 
       <file>/data/${publication.run.id}/logs/process.log</file> 
       <append>true</append> 
       <layout class="ch.qos.logback.classic.PatternLayout"> 
        <pattern>%5p %-25logger{25} %m %n</pattern> 
       </layout> 
      </appender> 
     </sift> 
    </appender> 
    <logger name="com.bitwiseor" level="INFO" /> 
    <logger name="org.springframework" level="INFO" /> 
    <root level="INFO"> 
     <appender-ref ref="SIFT" /> 
     <appender-ref ref="CONSOLE" /> 
    </root> 
</configuration> 

注意以下部分根據的logback配置參考更改:

<logger name="com.bitwiseor" level="INFO" /> 
<logger name="org.springframework" level="INFO" /> 
<root level="INFO"> 
    <appender-ref ref="SIFT" /> 
    <appender-ref ref="CONSOLE" /> 
</root>