答案:通过脚本预处理实现按错误级别分离日志。利用grep提取ERROR和WARN级别日志到独立文件,logrotate按配置每日轮转并压缩,关键日志保留14天,结合postrotate执行分离脚本,确保日志高效管理与排查。

在Linux系统中,日志文件会随着时间不断增长,影响系统性能和排查问题的效率。logrotate 是 Linux 下用于自动轮转、压缩和清理日志的标准工具。虽然 logrotate 本身不能直接按“错误级别”(如 ERROR、WARN)切割日志,但可以通过结合脚本过滤日志内容,实现按错误级别分离日志并进行轮转。
logrotate 通过配置文件定义日志的轮转策略,比如轮转周期、保留份数、是否压缩等。默认配置位于 /etc/logrotate.conf,而具体服务的配置通常放在 /etc/logrotate.d/ 目录下。
由于 logrotate 不解析日志内容,无法直接按 ERROR、WARN 等级别分离。但可以借助外部脚本,在轮转前将原始日志按级别拆分出多个文件,再由 logrotate 分别处理这些文件。
示例场景:
假设应用日志位于 /var/log/app.log,格式包含日志级别,例如:
2025-04-05 10:00:00 ERROR User login failed
2025-04-05 10:01:00 WARN Disk usage high
我们希望分离出:/var/log/app.error.log 和 /var/log/app.warn.log,并分别轮转。
1. 编写日志分离脚本
创建脚本 /usr/local/bin/split_app_log.sh:
#!/bin/bash LOG_FILE="/var/log/app.log" ERROR_LOG="/var/log/app.error.log" WARN_LOG="/var/log/app.warn.log" <h1>提取 ERROR 级别日志追加到 error 文件</h1><p>grep " ERROR " "$LOG_FILE" >> "$ERROR_LOG"</p><h1>提取 WARN 级别日志追加到 warn 文件</h1><p>grep " WARN " "$LOG_FILE" >> "$WARN_LOG"</p><h1>清空原日志或备份后清空</h1><p>> "$LOG_FILE"</p>
赋予执行权限:
chmod +x /usr/local/bin/split_app_log.sh
2. 配置 logrotate 规则
创建配置文件 /etc/logrotate.d/app:
/var/log/app.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
postrotate
/usr/local/bin/split_app_log.sh
endscript
}
<p>/var/log/app.error.log
/var/log/app.warn.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 644 root root
}</p>说明:
使用以下命令测试配置语法:
logrotate -d /etc/logrotate.d/app
-d 表示调试模式,不会真正执行。
强制执行一次轮转:
logrotate -f /etc/logrotate.d/app
检查 /var/log/app.error.log 和 /var/log/app.warn.log 是否生成对应内容。
基本上就这些。通过脚本预处理日志内容,再配合 logrotate 的轮转机制,就能实现按错误级别切割和管理日志。关键是分离逻辑要清晰,避免重复或遗漏日志条目。
以上就是Linux日志怎么切割_Linux日志使用logrotate按错误级别切割的配置实例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号