通过配置rsyslog模板可实现日志按天切割,如定义DailyLogs模板生成形如/var/log/myapp-20250405.log的文件,结合cron定时清理7天前日志,适用于轻量级环境,但生产环境更推荐使用logrotate。

Linux系统中的日志文件如果长期不处理,会变得非常大,影响系统性能和排查问题的效率。通过配置rsyslog服务,可以实现日志的自动切割与管理。下面介绍如何通过修改rsyslog配置来实现日志的按大小或时间进行切割。
rsyslog是Linux系统中主流的日志服务,负责收集、处理和存储系统及应用程序产生的日志信息。默认情况下,它将日志写入特定文件(如/var/log/messages、/var/log/syslog等),但不会自动切割。
要实现日志切割,可以通过以下方式:
本文重点讲解如何仅通过修改rsyslog配置实现日志切割,适用于不想依赖logrotate或需要实时控制的场景。
rsyslog本身不直接支持“当日志达到某个大小时自动重命名”的功能,但可以通过动态文件名 + 外部脚本监控或配合imfile模块读取应用日志并写入带编号的文件来模拟切割行为。不过最实用的方式是利用rsyslog的模板功能生成带时间戳的文件名,实现按天/小时归档。
以下是按每天生成一个日志文件的配置示例:
1. 编辑rsyslog配置文件
打开主配置文件:
sudo vim /etc/rsyslog.conf
2. 启用相关模块(如有需要)
确保加载了必要的模块:
module(load="imuxsock") # 接收本地syslog module(load="imklog") # 内核日志 module(load="mmjsonparse") # 可选:解析结构化日志
3. 定义模板实现按日期命名
在 GLOBAL DIRECTIVES 区域添加如下模板:
$template DailyLogs,"/var/log/myapp-%$YEAR%%$MONTH%%$DAY%.log" *.info ?DailyLogs
说明:
4. 重启rsyslog服务
sudo systemctl restart rsyslog
此后日志将按天分割,每天生成一个新文件。
rsyslog本身无法自动删除过期日志,需配合cron任务定期清理。
创建清理脚本
sudo vim /usr/local/bin/cleanup-logs.sh
内容如下:
#!/bin/bash # 删除7天前的日志 find /var/log/myapp-*.log -mtime +7 -delete
赋予执行权限并添加定时任务
chmod +x /usr/local/bin/cleanup-logs.sh
crontab -e
添加一行:
0 3 * * * /usr/local/bin/cleanup-logs.sh
每天凌晨3点执行清理。
虽然可以通过rsyslog模板实现日志分割,但在生产环境中更推荐使用logrotate工具,因为它专为日志管理设计,支持按大小、时间轮转,并可压缩、归档、发送通知等。
如果你坚持使用rsyslog方案,请注意:
基本上就这些。通过合理配置rsyslog模板,完全可以实现基础的日志切割需求,尤其适合嵌入式设备或轻量级服务器环境。对于复杂场景,还是建议搭配logrotate使用。
以上就是Linux日志怎么切割_Linux日志通过修改rsyslog配置实现切割的详细教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号