如何在不修改源码时调整SLF4J框架下Java日志的最大文件大小?
调整SLF4J绑定日志的文件最大输出大小(无需修改源码)
嘿,我来帮你搞定这个问题!首先得明确:SLF4J只是日志门面框架,它本身不负责日志文件的大小控制——真正起作用的是你底层绑定的日志实现(比如Logback、Log4j 2或者老版本的Log4j 1.x)。你之前修改的deployment.properties应该是项目自定义的配置文件,不是日志框架的标准配置,所以没生效很正常。下面分几种常见情况给你解决方案:
1. 如果你用的是Logback(最主流的SLF4J绑定)
Logback的核心配置文件是logback.xml或logback-spring.xml(Spring项目常用),放在项目的resources目录下即可被自动加载。找到其中的RollingFileAppender配置块,调整maxFileSize参数:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 你的日志文件路径 --> <file>./logs/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 重点:设置单文件最大大小为30MB --> <maxFileSize>30MB</maxFileSize> <!-- 可选:设置日志保留天数 --> <maxHistory>30</maxHistory> <!-- 可选:设置所有日志文件的总大小上限 --> <totalSizeCap>1GB</totalSizeCap> <!-- 滚动日志的命名规则,%i代表序号 --> <fileNamePattern>./logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern> </rollingPolicy> <!-- 日志格式配置 --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
2. 如果你用的是Log4j 2
Log4j 2的配置文件一般是log4j2.xml,同样放在resources目录下。找到RollingFile类型的Appender,通过SizeBasedTriggeringPolicy设置文件大小:
<Configuration status="INFO"> <Appenders> <RollingFile name="FILE" fileName="./logs/app.log" filePattern="./logs/app-%i.log.gz"> <!-- 日志格式 --> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> <Policies> <!-- 重点:触发滚动的单文件大小 --> <SizeBasedTriggeringPolicy size="30MB"/> </Policies> <!-- 可选:设置最多保留多少个滚动日志文件 --> <DefaultRolloverStrategy max="10"/> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="FILE"/> </Root> </Loggers> </Configuration>
3. 如果你用的是老版本的Log4j 1.x
如果项目还在使用Log4j 1.x,配置文件是log4j.properties,调整RollingFileAppender的MaxFileSize参数:
# 定义RollingFileAppender log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=./logs/app.log # 重点:设置单文件最大大小 log4j.appender.FILE.MaxFileSize=30MB # 可选:设置最多保留的备份文件数 log4j.appender.FILE.MaxBackupIndex=10 # 日志格式 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n # 关联到根日志 log4j.rootLogger=info, FILE
如何确认自己用的是哪种日志实现?
看项目的依赖包就行:
- 有
logback-classic.jar→ Logback - 有
log4j-core.jar→ Log4j 2 - 有
log4j.jar→ Log4j 1.x
调整完配置文件后,重启应用就能生效啦,完全不需要修改源码~
内容的提问来源于stack exchange,提问作者Markus Söhnel
相关产品推荐
相关产品推荐

