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命令查看

results matching ""

    No results matching ""