2017-04-05 10 views
1

mavenプロジェクトのデバッグ情報の印刷を有効にしようとしています。 log4jをpom.xmlに追加し、log4j.propertieslog4j2.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 
    
    を返します。 210

    と追加ステップとして追加しようとしました。

    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の1のためのものである、第二の一方が宣言のlog4j 2 ための両方問題を解決する方法はないlog4j.propertiesならびにlog4j2.properties

を添加しました。
実際のlog4jバージョンに一致するものだけを使用してください。

SLF4J:クラスパスには複数のSLF4Jバインディングが含まれています。 SLF4J:実際 バインディングは[ch.qos.logback.classic.util.ContextSelectorStaticBinder]タイプ の

ある実際、問題はかなり明確である:あなたは、SLF4Jはを結合としてLog4jの実装を使用したいが、実行時に少なくとも1つの別のSLF4Jバインディングをクラスパスに持っていなければなりません。ここでは別のバインディングであるLogbackのContextSelectorStaticBinderが挙げられます。
実行時にSLF4Jの実装/バインディングをクラスパスに設定する必要があります。

あなたの問題を解決するには、むしろ単純です。
Mavenを使用しているときは、あなたのアプリケーションの契約書pomからmvn dependency:treeコマンドを実行するか、またはあなたのアプリケーションをパッケージ化している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

私の答えはありがたくありがたいですが、妥当だと思いますが、1点..なぜconfigファイルが明示されている間は 'logger.isDbugEnabled()'はfalseを返しますか? –

+1

あなたは大歓迎です。 Log4J構成ではなく実行時に使用されるLogback構成であるためです。 – davidxxx

+0

私はそれを考え出しました。さらに、プロジェクトまたはその依存関係に複数のlog4j.propertiesファイルがある場合、そのうちの1つだけがロードされています –

1

log4j appenderを使用してslf4j loggerのログを出力する場合は、slf4j-log4j12 jarがあることを確認してlogback jarを削除するか、log4jまたはlogbackを使用するかどうかを制御できません。

関連する問題