You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logback配置RollingFileAppender后无日志生成问题求助

解决Logback无法生成日志文件的问题

我仔细看了你的配置和代码,发现几个关键问题导致日志没生成,一步步来修复:

1. Maven依赖配置错误(最核心问题)

你的pom.xml里有两个致命问题,直接导致Logback根本无法生效:

  • logback-classic的scope设为了test:这个依赖只会在测试代码运行时加载,主应用启动时完全看不到Logback的核心类,自然没法按你的配置生成日志。
  • 同时引入了slf4j-simple:SLF4J只能绑定一个日志实现,slf4j-simple是轻量的默认实现,它会直接覆盖Logback的绑定,让你的Logback配置彻底失效。

修正后的pom.xml依赖片段:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    <!-- 删掉test scope,默认compile范围,主应用运行时会加载 -->
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j-version}</version>
</dependency>
<!-- 完全删除slf4j-simple依赖,避免和Logback冲突 -->

2. Logback配置的滚动策略类型错误

你把SizeBasedTriggeringPolicy当成rollingPolicy来配置了,但这个类是触发策略(TriggeringPolicy)——只负责判断什么时候要切割日志,不是真正处理滚动逻辑的滚动策略(RollingPolicy)。类型不匹配会导致Appender初始化失败,日志根本写不进去。

如果想要按「日期+文件大小」滚动,推荐用TimeBasedRollingPolicy搭配SizeAndTimeBasedFNATP;如果只需要按大小滚动,就用FixedWindowRollingPolicy+SizeBasedTriggeringPolicy的组合。

修正后的滚动策略配置(日期+大小滚动示例):

<configuration>
    <appender name="FILE-LOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/application.log</file>
        <!-- 基于时间的滚动策略,同时支持按大小切割 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/application-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个日志文件最大5MB -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 可选:保留30天的日志 -->
            <maxHistory>30</maxHistory>
        </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>

3. 检查日志目录的权限和存在性

虽然Logback的RollingFileAppender通常会自动创建不存在的目录,但如果运行应用的用户没有目录的写入权限,日志文件还是生成不了。你可以:

  • 手动在项目根目录创建log文件夹
  • 或者改用绝对路径(比如/var/log/application.log)指向一个应用有权限访问的目录

4. 确认Logger命名匹配

你的代码里用LoggerFactory.getLogger(TestClass.class)创建的Logger,名称是类的全限定名(比如com.test.application.TestClass,如果TestClass在这个包下)。你配置的<logger name="com.test.application" level="info">会捕获这个包下所有类的日志,这部分是没问题的——但要确认TestClass确实在com.test.application包下,如果不在,得调整logger的name值。

验证修复步骤

  1. 按上面的内容修改pom.xml,执行mvn clean install更新依赖
  2. 替换logback.xml为修正后的配置
  3. 确保log目录存在(或者让应用自动创建)
  4. 重启应用,调用getAll()方法,去log目录下看看,应该能看到生成的application.log,里面包含你的测试日志了。

内容的提问来源于stack exchange,提问作者Shelalegen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:50:37