如何使用 .properties 文件和 maven 在 Log4j 中启用调试?
How to enable debugging in Log4j using .properties file and maven?
我正在尝试为 Maven 项目启用打印调试信息。我将 log4j 作为依赖项添加到 pom.xml
并将 log4j.properties
以及 log4j2.properties
和 rootloger=DEBUG, sdout
添加到 src/main/resources
文件夹。然后在所需的 class 中,我在所需的 class 'org.pakage1.ClassA' 中启动一个记录器并添加 logger.debug()
行,但我的领事中没有显示任何内容。当我检查 logger.isDebugEnabled()
它 returns false
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
文件
中说明调试消息效果很好
是不是少了什么?如何检查是否有冲突?
added log4j.properties as well as log4j2.properties
第一个用于log4j 1,第二个用于log4j 2。
声明两者都不是解决问题的方法。
仅使用与您的实际 log4j 版本匹配的版本。
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Actual
binding is of type
[ch.qos.logback.classic.util.ContextSelectorStaticBinder]
事实上,问题很明显:您想使用 log4J 实现作为 SLF4J 绑定但是您在运行时在类路径中至少有一个另一个 SLF4J 绑定。这里提到了来自 Logback 的 ContextSelectorStaticBinder
,这是另一个绑定。
对于 SLF4J,您必须在运行时的类路径中有一个 implementation/binding。
解决你的问题,其实很简单
当您使用 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.xml 中显式声明的依赖项,则删除它的依赖项。
如果是传递依赖,use the exclusion dependency mechanism of Maven.
如果你想使用 log4j appender 来打印 slf4j logger 的日志,请确保你有 slf4j-log4j12 jar 并删除 logback jar,否则无论是使用 log4j 还是 logback 都将超出你的控制。
我正在尝试为 Maven 项目启用打印调试信息。我将 log4j 作为依赖项添加到 pom.xml
并将 log4j.properties
以及 log4j2.properties
和 rootloger=DEBUG, sdout
添加到 src/main/resources
文件夹。然后在所需的 class 中,我在所需的 class 'org.pakage1.ClassA' 中启动一个记录器并添加 logger.debug()
行,但我的领事中没有显示任何内容。当我检查 logger.isDebugEnabled()
它 returns false
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
文件
是不是少了什么?如何检查是否有冲突?
added log4j.properties as well as log4j2.properties
第一个用于log4j 1,第二个用于log4j 2。
声明两者都不是解决问题的方法。
仅使用与您的实际 log4j 版本匹配的版本。
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
事实上,问题很明显:您想使用 log4J 实现作为 SLF4J 绑定但是您在运行时在类路径中至少有一个另一个 SLF4J 绑定。这里提到了来自 Logback 的 ContextSelectorStaticBinder
,这是另一个绑定。
对于 SLF4J,您必须在运行时的类路径中有一个 implementation/binding。
解决你的问题,其实很简单
当您使用 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.xml 中显式声明的依赖项,则删除它的依赖项。
如果是传递依赖,use the exclusion dependency mechanism of Maven.
如果你想使用 log4j appender 来打印 slf4j logger 的日志,请确保你有 slf4j-log4j12 jar 并删除 logback jar,否则无论是使用 log4j 还是 logback 都将超出你的控制。