2014-08-28 48 views
1

即使我將它放在每個源文件夾中,或者使用-Dlogback.configurationFile=C:\Users\dell\Documents\Corr\conf\logback.xml作爲程序參數或vm參數,我仍然無法使用logback.xml文件。但是,它沒有工作。爲什麼?爲什麼?配置logback失敗 - 爲什麼

我應該在哪裏放這個文件,以便它被檢測到?

我做了什麼;

logback.xml

<configuration> 
    <appender name ="FileAppender" 
     class="ch.qos.logback.core.FileAppender"> 


     <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
      <level>   INFO </level> 
      <onMatch>  ACCEPT </onMatch> 
      <onMismatch> DENY </onMismatch> 
     </filter> 

     <property file="conf/variables.properties" /> 

     <file> ${HOME}/build/log/corr.log </file> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern> 
       ${HOME}/build/log/%d{yyyy/MM/dd}.%i.log 
      </fileNamePattern> 

      <timeBasedFileNamingAndTriggeringPolicy 
       class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize> 2MB </maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 

     <encoder> 
      <charset>UTF-8</charset> 
      <pattern> 
       %date{yyyy-MM-dd HH:mm:ss.SSS} 
       %level{5} 
       [%thread] 
       %class{0}.%method at %line 
       %msg 
       %n 
       %ex{full} 
       %n 
      </pattern> 
     </encoder> 
    </appender> 

    <root level="DEBUG"> 
      <appender-ref ref="FileAppender" /> 
    </root> 
</configuration> 

屬性文件; variables.properties

HOME=C:\Users\dell\Documents\Corr 

項目層次

Corr 
    | - - src 
      | - - CorrAnaly 
        | - - main.java 
    | - - testSrc 
    | - - build 
      | - - log 
    | - - bin 
    | - - conf 
      | - - logback.xml 
      | - - variables.properties 

我哪裏有下的主要類項目的是在包(把logback.xml

  • 直接src文件夾下
  • 直接在main.java附近)
  • Corr folder

所有這些都沒有工作。另外,我嘗試使用conf文件夾作爲源文件夾。我已經聲明它並使用它,但沒有奏效。

幫我弄清楚爲什麼logback沒有檢測到我的文件。我應該怎麼做才能使用Logback功能?

環境:Windows 7,Eclipse的靛藍

UPDATE

爲了運行應用程序,我使用;

  • Eclipse中運行Java應用程序
  • ivyDe解決依賴

我ivy.xml文件

<ivy-module version="2.0"> 
    <configurations defaultconfmapping="runtime->compile">  
     <conf name="compile" /> 
     <conf name="test" /> 
     <conf name="runtime"  
       extends="compile" /> 
    </configurations> 
    <dependencies>   
     <dependency org="SLF4J" name="slf4j-api-1.7.7" rev="1.7.7" 
          conf="compile->default"/> 
     <dependency org="LOGBack" name="logback-core-1.1.2" rev="1.1.2" 
          conf="runtime->default"/> 
     <dependency org="SLF4J" name="slf4j-jdk14-1.7.7" rev="1.7.7" 
          conf="runtime->default"/> 
    </dependencies> 
</ivy-module> 

更新2 我也試過用簡單的情況下logback.xml我的第一個配置不起作用。即使對於簡單的logback.xml情況它也沒有工作;

<appender name ="ConsoleAppender" 
    class="ch.qos.logback.core.ConsoleAppender"> 

    <encoder> 
     <charset> UTF-8 </charset> 
     <pattern>%-5level [%thread] %class{0}.%method at line %line --%message%n%ex</pattern> 
    </encoder> 
</appender> 

<root level="DEBUG"> 
     <appender-ref ref="ConsoleAppender" /> 
</root> 

更新3

從昨晚開始,我已經嘗試了一堆東西,最後在源代碼中,我可以從getClass().getResource("/logback/logback.xml").toURI().toString()獲得不空的結果。但是,仍然會調用默認的logback.xml。

倉結構

bin 
| - - Corr 
| - - conf 
     | - - logback.xml 

我已經在Eclipse的VM參數部(separatly和逐個)試圖-Dlogback.configurationFile=;

  • \ BIN \的logback \ logback.xml
  • /bin/logback/logback.xml
  • 倉\的logback \ logback.xml
  • 斌/的logback/logback.xml
  • \的logback \ logback.xml
  • /logback/logback.xml
  • 的logback \ logback.xml
  • 的logback/logback.xml
  • \ logback.xml
  • /logback.xml
  • logback.xml
  • 〜\文件\科爾\建立\的logback \ logback.xml
  • 〜/文檔/科爾/建造/的logback /的logback .xml

我的大腦:不記得錯誤;幫我!

+0

您的.xml文件是否被複制到bin(或target)目錄中?你使用的是什麼構建系統?它不會在類路徑中,除非它與.class文件位於相同的目錄結構中。 – ccleve 2014-08-28 21:41:03

+0

另外,給你完整的-Dlogback.configurationFile =值。 – ccleve 2014-08-28 21:41:48

+0

@ccleve我怎麼能說eclipse將logback.xml複製到bin文件夾?不,它不會複製到bin目錄。 – Hevan 2014-08-28 21:42:44

回答

0

我不知道上述問題背後的原因,但改變依賴文件後,如;

<dependency org="SLF4J" name="slf4j-api-1.7.7" rev="1.7.7" 
      conf="compile->default"/> 
<dependency org="LOGBack" name="logback-core-1.1.2" rev="1.1.2" 
      conf="runtime->default"/> 
<dependency org="LOGBack" name="logback-classic-1.1.2" rev="1.1.2" 
      conf="runtime->default"/> 

我的配置文件現在已經被Logback認可了。我認爲slf4j-jdk14-1.7.7阻止Logback讀取我的配置文件。

爲了強調,我使用了slf4j的jdk,它導致將Logback綁定到其內部並忽略我自己的配置文件,即logback.xml。 (我說「忽略」,因爲你可以我的努力​​,我試過的所有可能性,在問題身上)。

+0

你的問題肯定是缺少logback-classic而不是關於slf4j-jdk14-1.7.7,因爲經典實現了很多所需的東西。 – 2014-08-30 09:09:57

+0

@ThorstenSchöning你錯了。我已經使用jdk版本,並沒有發生錯誤或警告。日誌以「日期錯誤類名msg」的形式顯示。每當我試圖找到哪個配置文件被讀取時,我都將經典的jar版本放在依賴腳本中;事後我採取了多個綁定錯誤。在Logback網站閱讀了一些說明之後,我覺得jdk block Logback可以讀取我的conf文件。我認爲我是對的。 – Hevan 2014-08-30 09:23:43

+0

你是對的,我認爲slf4j-jdk14-1.7.7是一個額外的「to slf4j」綁定,但它不是,它完全相反,是一個「從slf4j到除了logback之外的任何地方」綁定。這就是爲什麼logback不適合你。 – 2014-08-30 09:57:29