nginx的日志切割处理

在把apache迁移成nginx之后,就要着手解决web日志的问题了。

由于我们分域名网站众多,以前通过cronolog将apache的log自动按照yyyy-mm-dd截断成每天的各分网站日志,然后通过bash脚本使用awstat生成所有分网站的log分析页面,以便所有网站日志的统一管理和浏览。但是nginx的配置文件中不支持cronolog的管道,只好通过手动的方式来截取生成每天的各网站日志。

在nginx.conf中定义log:

在http{}内定义log格式:

log_formatcombined‘$remote_addr–$remote_user[$time_local]‘

‘”$request”$status$apache_bytes_sent‘

‘”$http_referer”“$http_user_agent”‘;

log_format表示log格式,combined表示定义的格式名称,后面表示格式样式。

在server{}内定义日志文件的位置和相应的格式:

access_log/data/weblogs/www1_access.logcombined;

nginx可接受的信号如下:SignalAction

TERM,INTTerminatetheserverimmediately

QUITStoptheserver

HUPConfigurationchanges,startnewworkers,gracefulstopofoldworkers

USR1Reopenlogfiles

USR2Upgradetheserverexecutable

WINCHGracefulStop(parentprocessadvisethechildrentoexit)

kill-HUPpid重新应用配置文件

kill-USR1pid重新刷新log

通过如下方式达到日志轮询的目的:

#vilogcron.sh

log_dir=”/data/weblogs”

date_dir=`date+%Y/%m/%d/%H`

/bin/mkdir-p${log_dir}/${date_dir}>/dev/null2>&1

/bin/mv${log_dir}/access.log${log_dir}/${date_dir}/access.log

kill-USR1`cat/opt/nginx/logs/nginx.pid`

定义一个cron,在每天晚上23:59:50执行这个脚本,后面的事情就交给awstats了。