# 示例:配置Apache日志轮转
vim /etc/logrotate.d/apache2
/var/log/apache2/*.log {
daily # 每天轮转
missingok # 如果日志文件丢失也不报错
rotate 14 # 保留14天的日志
compress # 压缩旧日志
delaycompress # 延迟压缩(下一次轮转时压缩)
notifempty # 如果日志为空则不轮转
create 640 root adm # 设置新日志文件的权限
sharedscripts # 所有日志处理完再执行脚本
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
测试配置:logrotate -d /etc/logrotate.d/apache2
强制立即执行:logrotate -f /etc/logrotate.d/apache2
# 查找大日志文件
find /var/log -type f -size +100M -exec ls -lh {} \;
# 清空日志文件(不删除文件)
> /var/log/biglog.log
# 按时间删除旧日志
find /var/log -type f -name "*.log" -mtime +30 -delete
编辑/etc/rsyslog.conf
或/etc/rsyslog.d/*.conf
:
# 限制日志级别,减少不必要日志
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 限制特定服务的日志量
:msg, contains, "Connection from" /var/log/firewall.log
& ~ # 丢弃这些消息不再处理
Nginx/Apache:
# Nginx配置中限制访问日志
http {
access_log /var/log/nginx/access.log combined buffer=32k flush=5m;
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
}
MySQL:
-- 设置慢查询日志和常规日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL general_log = 'OFF'; # 生产环境通常关闭常规日志
这些系统可以集中管理日志并自动处理轮转和归档。
设置监控脚本检查日志大小:
#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
MAX_SIZE=1000000 # 1GB
current_size=$(du -b "$LOG_FILE" | cut -f1)
if [ "$current_size" -gt "$MAX_SIZE" ]; then
echo "日志文件 $LOG_FILE 超过 $MAX_SIZE 字节" | mail -s "日志警报" admin@example.com
fi
或使用工具如Prometheus + Grafana监控日志增长。
通过以上方法,可以有效管理和控制Linux服务器上的日志文件大小,防止因日志溢出导致的系统问题。