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

Log4j日志滚动功能失效求助:SpringBoot从Logback切换后异常

问题分析与解决办法

你的核心问题很明确:你在application.properties里用了Logback专属的滚动配置项,但现在切换到了Log4j2,这些配置对Log4j2完全无效,所以日志滚动功能失效。下面分步骤帮你解决:

1. 优化依赖(可选)

你的pom.xml里,log4j-spring-boot已经被spring-boot-starter-log4j2包含,可以删掉重复依赖,简化后如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 修正日志滚动配置

Log4j2不识别logging.logback.*开头的属性,你有两种配置方式可选:

方式一:用application.properties快速配置(适合简单场景)

替换原来的Logback相关配置,改成Log4j2对应的属性:

# 基础日志配置
logging.file.name=logs/app.log
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

# Log4j2滚动规则
logging.log4j2.rollingPolicy.fileNamePattern=logs/app-%d{yyyy-MM-dd}-%i.log
logging.log4j2.rollingPolicy.maxFileSize=5MB
logging.log4j2.rollingPolicy.maxHistory=100
# 可选:设置总日志文件大小上限,比如100MB
# logging.log4j2.rollingPolicy.totalSizeCap=100MB

方式二:用独立log4j2.xml配置(推荐,复杂场景更灵活)

在src/main/resources下新建log4j2.xml,这是Log4j2的标准配置文件,功能更全面。示例配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
        </Console>
        <!-- 文件滚动输出 -->
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="logs/app-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <!-- 按5MB大小触发滚动 -->
                <SizeBasedTriggeringPolicy size="5MB"/>
                <!-- 可选:同时按天滚动 -->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!-- 同一日期下的文件序号,避免重名 -->
            <DefaultRolloverStrategy max="100"/>
            <!-- 保留最近100天的日志文件 -->
            <Delete basePath="logs" maxDepth="1">
                <IfFileName glob="app-*.log"/>
                <IfLastModified age="100d"/>
            </Delete>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- 根日志级别 -->
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
</Configuration>

使用该配置后,application.properties里的日志配置可简化或直接删除,完全交给log4j2.xml管理。

3. 验证效果

重启项目后,当日志文件达到5MB时,会自动生成带日期和序号的新日志文件,旧文件会按配置保留100天或最多100个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:57:32