2017-04-05 64 views
1

我正在嘗試爲Maven項目啓用打印調試信息。我說的log4j作爲依賴於pom.xml並添加log4j.properties以及log4j2.propertiesrootloger=DEBUG, sdoutsrc/main/resources文件夾。然後,在所需的班級中,我啓動所需班級「org.pakage1.ClassA」中的記錄程序並添加logger.debug()行,但是我的領事沒有顯示任何內容。當我檢查logger.isDebugEnabled()返回false如何使用.properties文件和maven在Log4j中啓用調試?

  • 的pom.xml

    <dependencies> 
    ..... 
    <dependency> 
        <groupId>org.slf4j</groupId> 
        <artifactId>slf4j-log4j12</artifactId> 
        <version>1.7.25</version> 
    </dependency> 
    

  • log4j.properties,同樣log4j2

    log4j.debug=true 
    log4j.rootLogger=DEBUG, stdout 
    
    log4j.appender.Stdout.threshold=debug 
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.stdout.layout.ConversionPattern=%-5p %d [%t] %c{1} - %m%n 
    

    並作爲額外的步驟,我嘗試添加

    log4j.logger.extendedsldnf.ExtendedSLDNFEvaluator=DEBUG 
    

    ,但它也沒有工作。

    package package1; 
    ...... 
    class ClassA{ 
        private Logger logger = LoggerFactory.getLogger(getClass()); 
        ...... 
        public static void main(String []args){ 
          logger.debug("message"); 
        } 
    
    
    } 
    

知道我是在收到警告

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 

而且該項目其他子模塊也有啓用日誌記錄類似的,當在log4j.properties文件中所述調試消息行之有效

有什麼遺漏嗎?如何檢查是否有衝突?

回答

1

加入log4j.properties以及log4j2.properties

第一個是爲log4j的1,第二個是用於log4j的2 聲明既不是解決問題的方式。
只使用哪一個匹配到您的實際log4j版本。

SLF4J:類路徑包含多個SLF4J綁定。 SLF4J:實際 綁定類型的 [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

事實上,這個問題是相當清楚的:你想使用Log4j實現作爲SLF4J結合你在類路徑中至少有一個另外的SLF4J綁定。這裏提到的是來自Logback的ContextSelectorStaticBinder,這是另一種綁定。
您必須在運行時在類路徑中爲SLF4J提供單個實現/綁定。

解決您的問題,這是相當簡單的。
當您使用Maven時,我建議您從您的應用程序的agreggator pom執行mvn dependency:tree命令,或者如果您沒有agreggator pom,請從打包應用程序的pom執行命令。
該命令將寫入輸出依賴關係(包括由您的pom拉動的傳遞依賴關係)。

它會輸出這樣的事情:

[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ Test-Spring-Boot --- 
[INFO] Test-Spring-Boot:Test-Spring-Boot:jar:0.0.1-SNAPSHOT 
[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:1.4.4.RELEASE:compile 
[INFO] +- org.springframework.boot:spring-boot-starter:jar:1.4.4.RELEASE:compile 
[INFO] | +- org.springframework.boot:spring-boot:jar:1.4.4.RELEASE:compile 
[INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.4.RELEASE:compile 
[INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.4.RELEASE:compile 
[INFO] | | +- ch.qos.logback:logback-classic:jar:1.1.9:compile 
[INFO] | | | +- ch.qos.logback:logback-core:jar:1.1.9:compile 
[INFO] | | | \- org.slf4j:slf4j-api:jar:1.7.22:compile 
[INFO] | | +- org.slf4j:jcl-over-slf4j:jar:1.7.22:compile 
[INFO] | | +- org.slf4j:jul-to-slf4j:jar:1.7.22:compile 
[INFO] | | \- org.slf4j:log4j-over-slf4j:jar:1.7.22:compile 
[INFO] | +- org.springframework:spring-core:jar:4.3.6.RELEASE:compile 
[INFO] | \- org.yaml:snakeyaml:jar:1.17:runtime 
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.4.RELEASE:compile 
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.11:compile 
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.11:compile 
[INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.11:compile 
[INFO] +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile 
[INFO] | +- javax.validation:validation-api:jar:1.1.0.Final:compile 
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile 
[INFO] | \- com.fasterxml:classmate:jar:1.3.3:compile 
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.6:compile 
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.6:compile 
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.6:compile 
[INFO] +- org.springframework:spring-web:jar:4.3.6.RELEASE:compile 
[INFO] | +- org.springframework:spring-aop:jar:4.3.6.RELEASE:compile 
[INFO] | +- org.springframework:spring-beans:jar:4.3.6.RELEASE:compile 
[INFO] | \- org.springframework:spring-context:jar:4.3.6.RELEASE:compile 
[INFO] \- org.springframework:spring-webmvc:jar:4.3.6.RELEASE:compile 
[INFO]  \- org.springframework:spring-expression:jar:4.3.6.RELEASE:compile 

你剛纔從其中的logback依賴被拉識別。
一旦確定它,如果它是從我們自己的pom中顯式聲明的依賴項,就移除它的依賴項。
如果它是傳遞依賴項,use the exclusion dependency mechanism of Maven

+0

謝謝你對我的答案似乎是合理的,但有一點..爲什麼可能'logger.isDbugEnabled()'返回false,而配置文件是顯式說明它是真的? –

+1

不用客氣。因爲它是在運行時使用的Logback配置,而不是Log4J配置。 – davidxxx

+0

我剛剛已經想通了,我發現,如果項目或其依賴項中有多個log4j.properties文件,只有其中一個被加載 –

1

如果您想使用log4j appender打印slf4j記錄器的日誌,請確保您有slf4j-log4j12 jar並刪除logback jar,否則無法使用log4j或logback進行控制。

相關問題