【问题标题】:Logback, there are no log files at all(RollingFileAppender and SizeBasedTriggeringPolicyLogback,根本没有日志文件(RollingFileAppender 和 SizeBasedTriggeringPolicy
【发布时间】:2025-12-18 22:10:01
【问题描述】:

logback 有问题。我尝试记录我的操作,想将所有日志写入文件,但在我的应用程序启动后根本没有日志

logback.xml

<configuration>
    <appender name="FILE-LOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <fileNamePattern>log/application-%d{yyyy-MM-dd}.log%i</fileNamePattern>
            <maxFileSize>5MB</maxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <logger name="com.test.application" level="info">
        <appender-ref ref="FILE-LOGGER"/>
    </logger>
    <root level="debug">
        <appender-ref ref="FILE-LOGGER"/>
    </root>
</configuration>

service.java

 static final Logger LOG = LoggerFactory.getLogger(TestClass.class);
public List<Items> getAll(){
    LOG.info("hi, info!!!!!");
    LOG.error("hi, error!!!!!");
}

pom.xml

<dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <scope>test</scope>
        </dependency>
    <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j-version}</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>${slf4j-version}</version>
            </dependency>

预计日志将在日志文件中

【问题讨论】:

  • 我已经提供了答案,你可以检查一下吗?
  • 抱歉,忘记复制 logback 依赖
  • 为什么logback依赖的范围是test?如果您不从 junit-test 运行 service.java,请删除它
  • 现在日志从控制台消失了,但日志文件夹中没有文件
  • 尝试绝对路径。我认为您正在查看错误的目录。

标签: java maven tomcat logging logback


【解决方案1】:

偶然发现了一个问题 我从 logback.xml 中删除了文件并开始在控制台中接收日志,并发现了下一个有趣的行:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:org/slf4j/slf4j-simple/1.7.26/slf4j-simple-1.7.26.jar!/org/slf4j/impl/StaticLoggerBinder.class]

ERROR in ch.qos.logback.core.joran.util.PropertySetter@100454a1 - A "ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy" object is not assignable to a "ch.qos.logback.core.rolling.RollingPolicy" variable.

要解决此问题,您需要执行以下步骤:

  • 删除slf4j依赖
  • SizeBasedTriggeringPolicy 重命名为 SizeAndTimeBasedRollingPolicy

【讨论】: