SLF4j 不写入日志文件
SLF4j not writing to a log file
在我的 Web 项目中,我尝试将 SLF4j 与 logback 一起使用,当我在本地计算机的 Tomacat 上启动应用程序时,我粘贴了 SLF4j xml 设置以及 POM 部分。我没有看到任何错误,也没有生成日志。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyyddMM:HHmmss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>./myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>14</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyyddMM:HHmmss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./myapp_debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>./myapp_debug.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>1</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyyddMM:HHmmss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- logger name="com.base22" level="TRACE"/ -->
<logger name="com.sample.app" level="TRACE" />
<logger name="org.apache" level="ERROR" />
<logger name="org.springframework" level="ERROR" />
<logger name="org.hibernate" level="ERROR" />
<logger name="java.sql" level="ERROR" />
<logger name="jdbc.audit" level="ERROR" />
<logger name="jdbc.connection" level="ERROR" />
<logger name="jdbc.sqltiming" level="ERROR" />
<logger name="jdbc.resultset" level="ERROR" />
<logger name="jdbc.resultsettable" level="ERROR" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="DEBUG" />
</root>
</configuration>
用于记录 jar 的 Maven Pom 部分
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
可能是您搜索的日志文件位置有误,请搜索同名的日志文件。
有一种有趣的方法可以解决这个问题。
首先,验证您没有冲突的绑定(即 log4j 被引入)。由于您使用的是 Maven,运行 以下命令:
mvn dependency:tree -Dverbose -Dincludes=:log4j,:commons-logging
如果您看到任何这些依赖项被传递包含,请将排除项添加到引入这些依赖项的依赖项中。
其次,将jul-to-slf4j
添加到您的依赖列表(对应于您正在使用的版本)。您应该将任何和所有绑定放在 slf4j-api 之外作为 runtime
范围。
第三,添加文件src/main/resources/logging.properties,内容为
handlers = org.slf4j.bridge.SLF4JBridgeHandler
如果您通过标准启动或 catalina 脚本启动 tomcat,它将自动配置一个 "log manager",允许您覆盖上下文特定的 java.util.logging(7 月)配置。
有关详细信息,请参阅 here。
您好,我做了一些更改,解决了这个问题,
POM.XML
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>
</dependency>
在logback.xml
将 ./myapp.log 更改为 ${catalina.home}/logs/myapp.log
现在我可以在 Tomcat/Logs 目录中看到生成的日志
在我的 Web 项目中,我尝试将 SLF4j 与 logback 一起使用,当我在本地计算机的 Tomacat 上启动应用程序时,我粘贴了 SLF4j xml 设置以及 POM 部分。我没有看到任何错误,也没有生成日志。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyyddMM:HHmmss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>./myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>14</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyyddMM:HHmmss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./myapp_debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>./myapp_debug.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>1</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyyddMM:HHmmss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- logger name="com.base22" level="TRACE"/ -->
<logger name="com.sample.app" level="TRACE" />
<logger name="org.apache" level="ERROR" />
<logger name="org.springframework" level="ERROR" />
<logger name="org.hibernate" level="ERROR" />
<logger name="java.sql" level="ERROR" />
<logger name="jdbc.audit" level="ERROR" />
<logger name="jdbc.connection" level="ERROR" />
<logger name="jdbc.sqltiming" level="ERROR" />
<logger name="jdbc.resultset" level="ERROR" />
<logger name="jdbc.resultsettable" level="ERROR" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="DEBUG" />
</root>
</configuration>
用于记录 jar 的 Maven Pom 部分
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
可能是您搜索的日志文件位置有误,请搜索同名的日志文件。
有一种有趣的方法可以解决这个问题。
首先,验证您没有冲突的绑定(即 log4j 被引入)。由于您使用的是 Maven,运行 以下命令:
mvn dependency:tree -Dverbose -Dincludes=:log4j,:commons-logging
如果您看到任何这些依赖项被传递包含,请将排除项添加到引入这些依赖项的依赖项中。
其次,将jul-to-slf4j
添加到您的依赖列表(对应于您正在使用的版本)。您应该将任何和所有绑定放在 slf4j-api 之外作为 runtime
范围。
第三,添加文件src/main/resources/logging.properties,内容为
handlers = org.slf4j.bridge.SLF4JBridgeHandler
如果您通过标准启动或 catalina 脚本启动 tomcat,它将自动配置一个 "log manager",允许您覆盖上下文特定的 java.util.logging(7 月)配置。
有关详细信息,请参阅 here。
您好,我做了一些更改,解决了这个问题,
POM.XML
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>
</dependency>
在logback.xml
将 ./myapp.log 更改为 ${catalina.home}/logs/myapp.log
现在我可以在 Tomcat/Logs 目录中看到生成的日志