Nginx 日志
日志分类
日志格式化
日志滚动和清理
我们可以自己配置定时任务来进行日志文件的滚动和清理,也可以使用 Linux 日志管理工具 logrotate 来完成日志滚动和清理工作。
logrotate 的运行逻辑是首先归档现有日志文件,然后再创建一个新的日志文件。
logrotate 是基于 cron 运行的,所以 logrotate 的触发时间是由 crontab 决定的。通常情况下每天只会进行一次滚动,出入使用了size配置或者使用-f强制执行。
logrotate 默认配置文件一般是/etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
# rotate 4
# keep 99 weeks worth of backlogs (tlinux team <g_APD_SRDC_OS@tencent.com>)
rotate 99
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 25
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 25
}
# system-specific logs may be also be configured here.
其中include /etc/logrotate.d包含了/etc/logrotate.d 目录下的所有配置文件,我们可以在这个目录下创建任务,例:
# 滚动文件
/usr/local/nginx/logs/*.log
{
# 日志滚动周期。可选值为 daily,monthly,weekly,yearly
daily
# 归档文件数量
rotate 7
# 归档文件最大保存时间,单位天
maxage 7
# 日志文件超过设置值后进行滚动,和滚动周期设置互斥,单位可以为 k M G
size 10M
# 在滚动周期内只有日志文件超过指定大小才进行滚动,否则跳过本次滚动
minsize 10M
# 使用日期作为命名格式
dateext
# 即使日志为空也进行滚动
ifempty
# 对滚动日志进行压缩
compress
# 配合compress选项,本次滚动不压缩,下次滚动压缩
delaycompress
# 在滚动后以指定权限和用户创建新的日志文件
create 644 nobody root
# 如果日志文件为空,轮循不会进行。
notifempty
# 当前归档失败后跳过,直接咨询下一个任务
missingok
# postrotate/endscript为滚动任务执行hook,
postrotate
# 通知Nginx 重新打开日志文件
sudo kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
# sharedscripts的意思是,所有文件处理完成之后执统一行一次脚本,否则每滚动一个文件都需要执行一次脚本
sharedscripts
}
手动执行:logrotate -v -f -d [配置文件],注意:logrotate 强制要求配置文件权限为 644
-d:详细显示指令执行过程,如果使用来该参数并不会执行真正的滚动操作,只是模拟滚动并打印执行信息,可以用来进行调试。-v:显示指令执行过程-f:强制执行
执行记录查询:logrotate 执行记录在/var/lib/logrotate.status中,新纪录会覆盖之前的记录。可以使用cat /var/lib/logrotate.status | grep nginx命令查看