我是直接写的一个简单的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;

}