我是直接写的一个简单的shell实现的,内容如下:
#! /bin/bash
datedir=`date +%Y%m%d`
/bin/mkdir /home/logs/$datedir >/dev/null 2>&1
/bin/mv /home/logs/*.log /home/logs/$datedir
/bin/kill -HUP `cat /var/run/nginx.pid`
这样执行以后,就会在/home/logs/$datedir目录下生成日志文件,你可以在/etc/crontab 里把执行这个shell的任务写上去,可以一小时执行一次,也可以每天执行一次,也可以一周执行一次,这个就看自己的需要了
找到删除日志文件的方法
rm -f /home/logs/`date '+%Y%m%d' -d ' -10 day'`*.log
这个也写到shell脚本里,然后每天执行一次,每天就回去/home/logs目录里找当前时间之前10天的文件,并删除
日志格式:
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
//此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP
错误日志error_log日志级别
error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit, 该级别在日志名后边定义格式如下:
error_log /your/path/error.log crit;
crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。
nginx 日志切割(按小时)
vim /usr/local/nginx/sbin/log.conf //写入以下内容
rotate 48
Nocompress
/home/logs/access.log {
Sharedscripts
create 0644 www www
Postrotate
/bin/kill -USR1 `cat /usr/local/nginx/var/nginx.pid`
LDATE=`date +%Y%m%d%H --date="-1 hour"`
/bin/mv /home/logs/access.log.1 /home/logs/${LDATE}-access_log
Endscript
}
运行: /usr/sbin/logrotate /usr/local/nginx/sbin/log.conf
并且把这行命令加入到cron中按每小时一次去执行
静态文件不记录日志,配置缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$
{
expires 12h;
access_log off;
}