下面以常见语言和日志框架为例,说明 Logger 如何按天归档(Daily Rolling / Log Rotation)。核心思路都是:文件名带日期 + 定期切换日志文件。
按天归档通常包含 3 个要素:
日志文件名包含日期
app-2026-01-21.log
app-2026-01-22.log
时间触发切换
可选:历史日志清理
<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>
<!-- 保留 30 天 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
✅ 特点:
<RollingFile name="FileAppender"
fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}.log">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
import logging
from logging.handlers import TimedRotatingFileHandler
handler = TimedRotatingFileHandler(
filename="app.log",
when="midnight", # 按天
interval=1,
backupCount=30,
encoding="utf-8"
)
handler.suffix = "%Y-%m-%d"
logging.basicConfig(
level=logging.INFO,
handlers=[handler]
)
生成文件:
app.log
app.log.2026-01-21
app.log.2026-01-22
✅ when="midnight" 表示 每天 0 点归档
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '30d'
});
const logger = winston.createLogger({
transports: [transport]
});
即使不用框架,也可以用 logrotate(生产环境非常常见):
/var/log/app/*.log {
daily
rotate 30
compress
missingok
notifempty
copytruncate
}
✅ 适合:
✅ 生产环境推荐组合
✅ 避免
如果你能告诉我:
我可以直接给你一份 可复制粘贴的最终配置 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。