Nginx-2.nginx日志详解
Posted wang-hongwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx-2.nginx日志详解相关的知识,希望对你有一定的参考价值。
一、 错误日志[默认开启]
nginx记录错误日志的功能属于核心功能模块ngx_core_module,参数名字是error_log,可以放在mian区块中全局配置,也可以放在不同的虚拟主机中单独记录。
语法如下:
error_log file level ;
error_log是错误日志关键字,不能修改
file是日志文件,任意指定存放目录
level是错误日志级别
常见级别有[debug|info|notice|warn|error|crit|caert|emerg]级别越高,记录的信息越少,反之就越多,不要设置info等较低级别,会带来巨大的磁盘I/O开销
error_log默认就已经启用,默认级别crit,默认位置logs/error.log,可以放在mian、http、server、location区块内.
推荐写法
推荐将错误日志级别调整为error,写在主区块[main]内.
error_log logs/error.log error;
二、 访问日志[默认开启]
Nginx会把每个用户访问网站的日志信息记录到指定的文件中,供网站方分析用户行为
默认开启,可放在http、server、location、if in location、limit_except中
1.格式和写法
1)日志格式
此功能由日志模块[ngx_http_log_module]负责,共有两个控制参数:
log_format 定义日志记录格式
access_log 指定日志文件路径,使用何种日志格式记录
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"‘;
2)access_log默认写法如下:
access_log logs/access.log main;
可以定义多个log_format,然后access_log中选择指定的日志格式文件即可(上文的mian就是格式名)
若有需要,还可以在日志中增加如下字段
buffer=[size] 存放日志缓冲区 flush=[time] 缓冲区日志刷入磁盘时间 gzip 压缩传输字段可压缩后传输日志
2.nginx日志格式变量解释
$remote_addr 记录访问网站的客户端地址 $remote_user 远程客户端用户名称 $time_local 记录访问时间与时区 $request 用户请求起始行信息 $status 记录请求返回的状态码 $body_bytes_sent 服务器发送给客户端的响应body字节数 $http_referer 记录该请求是从那个链接访问过来的 $http_user_agent 记录客户端类型信息,如手机端,浏览器等 $http_x_forwarded_for 走前端代理服务器获取用户访问信息,前端代理服务器也得开启此功能
3.真实的访问日志示例:
10.0.0.1 - - [16/Nov/2017:00:13:57 +0800] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
三、访问日志写法
1.常规情况
在http区块中定义日志格式和输出
http { log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" "$http_x_forwarded_for"‘; access_log /var/log/nginx/access.log main;
......
2.多虚拟服务器区块
较多虚拟服务器时,在http区块中定义日志格式,在每个sever中以虚拟服务器名命名日志,便于查看,示例如下:
http { log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" "$http_x_forwarded_for"‘; ...... server { listen 80; server_name www.etiantian.omg; access_log /var/log/nginx/www_access.log main; ......
3.日志需要远程传输时[了解即可]
可以控制日志缓冲区大小,并压缩日志(gzip压缩后显示乱码,学习过程不要用)
access_log logs/www_access.log main gzip buffer=32k flush=5s;
四、Nginx访问日志轮询切割
默认情况下nginx会将所有访问日志都记录在一个文件中,日志会很大且不利于分析和处理,可以用脚本加定时任务的方式按天切割日志
1.脚本内容如下:
cat >/servers/scripts/cut_nginx_log.sh <<"EOF" #!bin/sh cd /application/nginx/logs /bin/mv www_access.log www_access_$(date +%F -d ‘-1 day‘).log /application/nginx/sbin/nginx -s reload EOF
2.定时任务如下:
crontab -l|tail -2 #cut nginx access_log 00 00 * * * /bin/sh /servers/scripts/cut_nginx_log.sh >/dev/null 2>&1
以上是关于Nginx-2.nginx日志详解的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情