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 目录中看到生成的日志