Nginx关闭日志 或自定义切割日志

2010年3月16日星期二 | | |

用Nginx做Web服务器,如果没有处理好日志,日志文件可能会很恐怖~10G、20G

配置关闭日志:

可以修改nginx.conf 找到access_log:

access_log /dev/null;
error_log /dev/null;

当然也可以这样修改:

access_log off;

这样全部把他们丢到系统的黑洞里了
不用每时每刻都往系统磁盘疯狂的读写日志了 还延长硬盘的寿命

修改完,重启Nginx( kill -HUP `cat logs/nginx.pid` )即可。

配置 Nginx 自动切割日志:

跟 Apache HTTP Server(以下称 Apache)不同的是,Apache 可以将日志输出通过管道的方式进行重新定向,依此来进行自动的日志切割。Nginx 在现今版本上还没能跟 Apache 一样,通过%YY等参数按日期分批创建日志,但是通过给 nginx 进程发送一个特定的信号,可以使 nginx 重新生成日志文件。这是从Apache迁移到Nginx遇到的很大的一个问题,由于Nginx并不支持在配置文件中使用管道方式输出日志,所以就不存在所谓的后端分割程序了。于是cronolog没办法帮助Nginx切割日志。我们可以定期执行一个 Shell 脚本来切换日志,重新命名或转移,具体的脚本如下:

# mv  /opt/nginx/logs/access.log /opt/nginx/logs/access_`date +%Y%m%d`.log  # killall –s USR1 nginx	#使用USR1参数通知Nginx进程切换日志文件  

将以上脚本内容保存为文件名为 logcron.sh 存到自定的目录中,例如 /opt/nginx/sbin/logcron.sh

使用 Crontab 让该脚本程序在每天晚上 11 点 59 分自动执行,即可做到按天创建日志。

eg2:

有人想了个办法,创建了一个fifo管道替换配置文件,nginx将日志输出到管道,然后cronolog进行切割。nginx的作者本人并不推荐这种做法,因为可能会影响效率,原文在此:http://pjkh.com/articles/2007/03/15/nginx-and-cronolog/

Nginx的作者自己推荐的方式是使用kill -USR1 命令来重启log模块,当然,在这之前你要把log移动到其他地方,但如此依然不能准确的按照日期分割日志。

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

kill -USR1 `cat /var/run/nginx.pid`

看来只能先试试Logrotate了,如果还是不行就只能修改程序适应它,或者写个程序处理切割过的log了。

UPDATE:

还是决定采取nginx作者本人推荐的方法,脚本如下:

#!/bin/bash
logs_path="/www/"
mv ${logs_path}beta_access.log ${logs_path}beta_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/nginx.pid`

#!/bin/bash

logs_path="/www/"

mv ${logs_path}beta_access.log ${logs_path}beta_$(date -d "yesterday" +"%Y%m%d").log

kill -USR1 `cat /usr/local/nginx/nginx.pid`

然后编辑cron让这个脚本每天凌晨00:01执行

1 0 * * * sh /opt/nginx/cutlog.sh

至于由于这种方式产生的误差,我考虑用python解决,比如在00:10分用python处理,然后再由日志解析程序去分析。

欢迎大家到我们的网站去注册属于您的域名.. 域名注册   捷飞网络  虚拟主机  淘宝交易  淘宝网店  国外空间 新网代理 免备案 心动不如行动.赶快出动吧..

谢谢光临本站: http://home.benz.la   共享无限..  转载请注明出处..

我的QQ空间
禁止搜索引擎收录的方法 之robots.txt 及相关
禁止搜索引擎收录的方法什么是robots.txt文件?搜索引擎使用spide...
 

0 评论:


所有文章收集于网络,如果有牵扯到版权问题请与本站站长联系。谢谢合作![email protected]