本文目录导读:

Java 日志分割通常通过日志框架来实现,最常见的做法是使用 Logback 或 Log4j2,配合框架自带的滚动策略(如基于时间、大小或两者的组合)。
以下是几种主流场景的配置案例:
前提
确保项目中引入了日志框架的依赖(以 Maven 为例):
Logback (Spring Boot 默认):
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
Log4j2 (高性能场景):
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j2-core</artifactId>
</dependency>
Logback 按天滚动 + 大小限制 (最常用)
这是最推荐的方案:每天生成一个日志文件,但如果当天日志超过指定大小(如 100MB),则自动拆分并进行编号。
配置文件 logback-spring.xml (放在 src/main/resources 下):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志文件路径和名称 -->
<property name="LOG_PATH" value="./logs" />
<property name="APP_NAME" value="myapp" />
<!-- 1. 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 2. 滚动日志文件(核心配置) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}.log</file>
<!-- 滚动策略:基于时间(按天)和大小 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件名模式:%d{yyyy-MM-dd} 表示按天 -->
<!-- .%i 表示当天的第几个文件(因为启用了大小限制) -->
<fileNamePattern>${LOG_PATH}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 单个日志文件最大大小 -->
<maxFileSize>100MB</maxFileSize>
<!-- 保留最近 30 天的日志 -->
<maxHistory>30</maxHistory>
<!-- 所有日志文件总大小上限(可选):超过则删除最早的 -->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志级别配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
效果:
- 2024-01-01 的日志文件:
myapp.2024-01-01.0.log,myapp.2024-01-01.1.log(如果当天超过100MB) - 超过30天(或总大小超过10GB)的日志自动删除。
Log4j2 按天 + 大小滚动 (高性能场景)
Log4j2 的配置语法不同,但功能类似。
配置文件 log4j2.xml (放在 src/main/resources 下):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATH">./logs</Property>
<Property name="APP_NAME">myapp</Property>
</Properties>
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 滚动文件输出 -->
<RollingFile name="RollingFile"
fileName="${LOG_PATH}/${APP_NAME}.log"
filePattern="${LOG_PATH}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<!-- 滚动策略:基于时间(按天) -->
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 大小触发:超过 100 MB 时滚动 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- 最大文件数(保留 30 天) -->
<DefaultRolloverStrategy max="30">
<!-- 可选:限制总大小 -->
<Delete basePath="${LOG_PATH}" maxDepth="1">
<IfFileName glob="*.log.gz" />
<IfLastModified age="30d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
注意:
- 日志文件在滚动后会进行 Gzip 压缩(
.log.gz),节省存储空间。 interval="1"按天滚动,modulate="true"对齐到午夜。
纯按文件大小滚动(不按时间分割)
适用于希望日志文件保持较小体积,不关心日期归档的场景。
Logback 配置(仅修改 rollingPolicy):
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}.log</file>
<!-- 仅按大小滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_PATH}/${APP_NAME}.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex> <!-- 保留 10 个历史文件 -->
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
效果:
- 生成
myapp.1.log,myapp.2.log... 直到myapp.10.log。 - 超过 10 个文件后,最旧的文件被覆盖(固定窗口滚动)。
总结建议
| 场景 | 推荐配置 |
|---|---|
| 生产环境通用 | 案例一 (Logback + SizeAndTimeBasedRollingPolicy) |
| 高性能/低延迟 | 案例二 (Log4j2 + Gzip 压缩) |
| 仅控制大小 | 案例三 (FixedWindow + SizeBased) |
| 仅控制天数(不关心大小) | Logback:TimeBasedRollingPolicy;Log4j2:移除 SizeBasedTriggeringPolicy |
关键配置解释:
%d{yyyy-MM-dd}:日志文件名按日期分割。%i:当文件达到大小上限时,自动生成序号(如.0,.1)。maxHistory/max:控制日志保留天数,防止磁盘空间被占满。totalSizeCap/Delete:控制总存储上限,更彻底的空间管理。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播