nginx 直接在配置文章中设置日志分割
直接在nginx配置文件中,配置日志循环,而不需使用logrotate或配置cron任务。需要使用到$time_iso8601 内嵌变量来获取时间。$time_iso8601格式如下:2015-08-07T18:12:02+02:00。然后使用正则表达式来获取所需时间的数 据。
按天分割日志
使用下面的代码块
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") { set $year $1; set $month $2; set $day $3; } access_log /data/logs/nginx/upchina.com-$year-$month-$day-access.log;
也可以使用Perl语法来捕获,如下:
if ($time_iso8601 ~ "^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})") {} access_log /data/logs/nginx/upchina.com-$year-$month-$day-access.log;
按时、分、秒分割
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; set $minutes $5; set $seconds $6; }
非常方便的进行日志分割。建议按小时分割日志,方便分析查询日志。
使用logrotate+crontab进行日志切割
nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析。以日期来作为日志的切割是比较好的,通常我们是以每日来做统计的。下面来说说nginx日志切割。
1. 定义日志轮滚策略
# vim nginx-log-rotate
/data/weblogs/*.log { nocompress daily copytruncate create notifempty rotate 7 olddir /data/weblogs/old_log missingok dateext postrotate /bin/kill -HUP `cat /var/run/nginx.pid 2> /dev/null` 2> /dev/null || true endscript }
[warning]/data/weblogs/*.log使用通配符时,/data/weblogs/目录下的所有匹配到的日志文件都将切割。如果要切割特定日志文件,就指定到该文件。[/warning]
2. 设置计划任务
59 23 * * * root ( /usr/sbin/logrotate -f /PATH/TO/nginx-log-rotate)
这样每天23点59分钟执行日志切割。