日志文件分割(Log Rotation)是运维和开发中常见的需求,目的是防止日志无限增长、占用磁盘空间,同时便于管理和排查问题。下面按常见场景给你系统讲解。
当日志达到一定大小后自动切分:
app.log
app.log.1
app.log.2
✅ 适合高频日志
❌ 不太直观(不好对应时间)
按天、小时、分钟生成日志:
app.log
app-2026-01-21.log
app-2026-01-20.log
✅ 时间清晰
✅ 常用于业务日志
最常见、最推荐:
app-2026-01-21.log
app-2026-01-21.log.1
logrotate(最推荐)which logrotate
/var/log/app/*.log {
daily
rotate 7
size 100M
compress
missingok
notifempty
create 0644 app app
}
| 参数 | 含义 |
|---|---|
| daily | 按天 |
| rotate 7 | 保留 7 份 |
| size 100M | 超过 100M 才切 |
| compress | 压缩旧日志 |
| missingok | 日志不存在不报错 |
| notifempty | 空文件不切 |
| create | 新建日志文件权限 |
logrotate -vf /etc/logrotate.d/app
access_log /var/log/nginx/access.log;
# 自动按时间切
配合 logrotate:
/var/log/nginx/*.log {
daily
rotate 30
compress
postrotate
nginx -s reload
endscript
}
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
"app.log",
maxBytes=100*1024*1024,
backupCount=7
)
new winston.transports.DailyRotateFile({
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '7d'
})
✅ 推荐组合:
你可以告诉我:
我可以给你完全可复制的配置方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。