在 java 日志记录中,要实现日志文件按时间滚动,最标准的做法是使用 logback 框架并配置 timebasedrollingpolicy。你需要在 logback.xml 中定义一个 appender,指定 filenamepattern 来包含日期占位符(如 %d{yyyy-mm-dd}),这样当日志文件达到设定的时间周期(如每天)时,logback 会自动将当前文件重命名并创建新文件。如果还需要控制保留天数或文件大小,可以结合 maxhistory 或 triggeringpolicy 进行细化设置。

如何配置每日滚动的日志文件路径
要配置每日滚动的日志文件,核心在于 fileNamePattern 属性的设置。该属性不仅定义了日志文件的存储位置,还通过其中的日期模式决定了滚动的频率。例如,使用 %d{yyyy-MM-dd} 表示每天生成一个新文件。当系统时间跨越午夜时,当前的 appender 会关闭旧文件,并根据模式生成新的文件名继续写入。这种配置方式简单直接,适用于大多数需要按天归档日志的场景。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
如何同时按大小和时间进行滚动
如果希望日志文件既受时间限制又受大小限制,可以使用 SizeAndTimeBasedRollingPolicy。这种策略允许你在每天滚动的基础上,进一步限制单个日志文件的最大大小。当文件达到设定大小时,即使未到午夜也会触发滚动,生成带序号的新文件(如 app.1.log, app.2.log)。这对于防止单日内产生过大日志文件非常有用,能更精细地管理磁盘空间。
立即学习“Java免费学习笔记(深入)”;

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="SIZE_TIME_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/size_time_app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/size_time_app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="SIZE_TIME_FILE" />
</root>
</configuration>
当maxHistory设置为0时会发生什么
在 TimeBasedRollingPolicy 或 SizeAndTimeBasedRollingPolicy 中,maxHistory 参数用于控制保留的日志文件历史数量。如果将其设置为 0 或未显式设置(取决于具体版本默认行为,通常建议显式设置),Logback 不会自动删除任何旧的滚动日志文件。这意味着随着时间推移,日志目录下的文件会无限累积,直到填满磁盘。因此,在生产环境中,务必根据磁盘容量和业务需求设置合理的 maxHistory 值,或者配合 totalSizeCap 使用,以防止磁盘空间耗尽。


















