前言
Nginx日志对于统计、系统服务排错很有用。 Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。 access.log 记录哪些用户,哪些页面以及用户浏览器,IP等访问信息; error.log 记录服务器错误的日志;
设置access.log
在nginx.conf文件里面配置
代码语言:javascript复制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自定义格式
默认的日志格式
代码语言:javascript复制log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
代码语言:javascript复制tail -f /var/log/nginx/access.log
设置error_log
错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。 错误日志不支持自定义。
代码语言:javascript复制error_log path [level];
- 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;
##可以将不同的错误类型分开存储
日志切割
测试按分钟分割 编写脚本
代码语言:javascript复制vim logaccess.sh
#!/bin/bash
#设置日志文件保存目录
LOG_PATH=/var/log/nginx/
#备份文件名称
LOG_BAK="$(date -d "last_minute" %Y%m%d%H%M)"
#重命名日志文件
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${LOG_BAK}.log #
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${LOG_BAK}.log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat /run/nginx.pid`
代码语言:javascript复制chmod x logaccess.sh
设置定时任务
代码语言:javascript复制crontab -e
#每分钟进行日志切割
*/1 * * * * sh /root/logaccess.sh > /dev/null 2>&1
按日切割:
代码语言:javascript复制vim log2.sh
#!/bin/bash
#设置日志文件保存目录
LOG_PATH=/var/log/nginx/
#备份文件名称
LOG_PATH_BAK="$(date -d "yesterday" %Y%m%d)"
#重命名日志文件
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${LOG_BAK}.log #
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${LOG_BAK}.log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat /run/nginx.pid`
设置定时任务
代码语言:javascript复制crontab -e
#每天23:59分开始执行
59 23 * * * sh /root/logaccess.sh > /dev/null 2>&1