天天看点

Nginx 日志配置、日志切割设置 access.log设置error_log日志切割

Nginx 日志配置、日志切割

  • 设置 access.log
    • 语法
    • log_format自定义格式
  • 设置error_log
    • 语法
  • 日志切割

前置文章:Nginx 的配置文件 nginx.conf

Nginx日志对于统计、系统服务排错很有用。

Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。

通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。

错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。

因此,将日志好好利用,可以得到很多有价值的信息。

设置 access.log

语法

在 nginx.conf 文件里配置:

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; 
#设置访问日志
access_log off;
#关闭访问日志
           
  • path 指定日志的存放位置。
  • format 指定日志的格式。默认使用预定义的combined。
  • buffer 用来指定日志写入时的缓存大小。默认是64k。
  • gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。
  • flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。
  • if 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志。
  • 另外,还有一个特殊的值off。如果指定了该值,当前作用域下的所有的请求日志都被关闭。

示例:

http {
   ...
	       ##日志格式使用默认的combined;指定日志的缓存大小为32k;日志写入前启用gzip进行压缩,压缩比使用默认值1;缓存数据有效时间为1分钟。
	    access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m;  
   ...
}
           

access_log指令的作用域分别有http,server,location。

更里面的设置,会覆盖外面的设置。

log_format自定义格式

默认的日志格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
           

各参数明细表:

Nginx 日志配置、日志切割设置 access.log设置error_log日志切割

显示最新追加的日志:

tail -f /usr/local/nginx/logs/access.log

Nginx 日志配置、日志切割设置 access.log设置error_log日志切割

设置error_log

错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。

错误日志不支持自定义。

语法

  • path参数指定日志的写入位置。
  • level参数指定日志的级别。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值(等级从低到高排列)。

    只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error。

示例:

error_log  logs/error.log; 
error_log  logs/error_notice.log  notice;
error_log  logs/error_info.log  info;			
##可以将不同的错误类型分开存储
           

日志切割

测试,按分钟切割:

可以在 conf 目录下

vim logcut.sh

#!/bin/bash
#设置日志文件存放目录
LOG_HOME=/usr/local/nginx/logs/
#备分文件名称
LOG_PATH_BAK="$(date -d "last_minute" +%Y%m%d%H%M)"
#重命名日志文件,mv 会删除原文件,导致日志丢失,因为Nginx不会自己去再创建一个日志文件
mv ${LOG_HOME}/host.access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log
#向 Nginx 主进程发送 USR1 信号。Nginx 里 USR1 信号是重新打开日志文件
kill -USR1 `cat ${LOG_HOME}/nginx.pid`
           

chmod u+x logcut.sh

配置cron:

crontab -e

*/1 * * * * /usr/local/nginx/conf/logcut.sh
#分/1 时 日 月 年
           

进入 logs 文件夹:

Nginx 日志配置、日志切割设置 access.log设置error_log日志切割

按日切割:

在 conf 目录下

vim logcut.sh

#!/bin/bash
#设置日志文件存放目录
LOG_HOME=/usr/local/nginx/logs/
#备分文件名称
LOG_PATH_BAK="$(date -d "yesterday" +%Y%m%d)"
#重命名日志文件,mv 会删除原文件,导致日志丢失,因为Nginx不会自己去再创建一个日志文件
mv ${LOG_HOME}/host.access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log
#向 Nginx 主进程发送 USR1 信号。Nginx 里 USR1 信号是重新打开日志文件
kill -USR1 `cat ${LOG_HOME}/nginx.pid`
           

chmod u+x logcut.sh

配置cron:

crontab -e

* * */1 * * /usr/local/nginx/conf/logcut.sh
#分 时 日/1 月 年
           

继续阅读