Logback配置RollingFileAppender后无日志生成问题求助
我仔细看了你的配置和代码,发现几个关键问题导致日志没生成,一步步来修复:
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值。
验证修复步骤
- 按上面的内容修改pom.xml,执行
mvn clean install更新依赖 - 替换logback.xml为修正后的配置
- 确保log目录存在(或者让应用自动创建)
- 重启应用,调用
getAll()方法,去log目录下看看,应该能看到生成的application.log,里面包含你的测试日志了。
内容的提问来源于stack exchange,提问作者Shelalegen

