如何将 SLF4J 日志记录与 Spring 4 集成?
How to integrate SLF4J logging with Spring 4?
找不到任何好的答案,为什么 slf4j 日志记录不能与 spring 一起工作 4. 感谢 this post 我已经完成了所有工作,但作者没有提到:
The mandatory logging dependency in Spring is the Jakarta Commons Logging API (JCL)
(http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/htmlsingle/).
这意味着如果我们想要 slf4j 工作 我们必须从我们的类路径(或 pom.xml如果使用 Maven)。使用 maven spring-core 时会自动选择 commons-logging。 (我在执行命令"mvn dependency:tree"时理解了这一点)。
重现步骤:
从 spring-core
中排除 commons-logging
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
添加到pom.xml下一个依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.19</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.19</version>
</dependency>
像这样创建log4j2.xml文件(如果你想让log4j2通过slf4j记录)。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="CONSOLE" />
</Root>
<logger level="info" additivity="false" name="org.springframework.security">
<AppenderRef ref="CONSOLE" />
</logger>
<logger level="info" additivity="false" name="org.springframework.web">
<AppenderRef ref="CONSOLE" />
</logger>
<logger level="warn" additivity="false" name="controllers">
<AppenderRef ref="CONSOLE" />
</logger>
</Loggers>
</Configuration>
在您的 类:
中写入日志消息
private final Logger logger =LoggerFactory.getLogger(this.getClass());
logger.debug("This is a debug message");
logger.info("This is an info message");
您不需要排除 commons-logging。如果您使用 log4j-jcl 而不是 jcl-over-slf4j,Spring 日志记录将直接路由到 log4j,而不是通过 slf4j。
现在,谢谢@rgoers 我的 pom.xml 日志部分看起来像:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.19</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.5</version>
</dependency>
找不到任何好的答案,为什么 slf4j 日志记录不能与 spring 一起工作 4. 感谢 this post 我已经完成了所有工作,但作者没有提到:
The mandatory logging dependency in Spring is the Jakarta Commons Logging API (JCL)
(http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/htmlsingle/).
这意味着如果我们想要 slf4j 工作 我们必须从我们的类路径(或 pom.xml如果使用 Maven)。使用 maven spring-core 时会自动选择 commons-logging。 (我在执行命令"mvn dependency:tree"时理解了这一点)。
重现步骤:
从 spring-core
中排除 commons-logging<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
添加到pom.xml下一个依赖:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.19</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.19</version> </dependency>
像这样创建log4j2.xml文件(如果你想让log4j2通过slf4j记录)。
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="CONSOLE" /> </Root> <logger level="info" additivity="false" name="org.springframework.security"> <AppenderRef ref="CONSOLE" /> </logger> <logger level="info" additivity="false" name="org.springframework.web"> <AppenderRef ref="CONSOLE" /> </logger> <logger level="warn" additivity="false" name="controllers"> <AppenderRef ref="CONSOLE" /> </logger> </Loggers> </Configuration>
在您的 类:
中写入日志消息private final Logger logger =LoggerFactory.getLogger(this.getClass()); logger.debug("This is a debug message"); logger.info("This is an info message");
您不需要排除 commons-logging。如果您使用 log4j-jcl 而不是 jcl-over-slf4j,Spring 日志记录将直接路由到 log4j,而不是通过 slf4j。
现在,谢谢@rgoers 我的 pom.xml 日志部分看起来像:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.19</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.5</version>
</dependency>