给Nginx配置日志格式和调整日期格式
效果对比
官方默认日志格式
# 官方默认日志格式
log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
# 输出结果
127.0.0.1 - - [01/Jul/2020:03:25:17 +0800] "GET /resource/js/bootstrap.min.js HTTP/1.1" 200 36816 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "192.168.0.1"
127.0.0.1 - - [01/Jul/2020:03:25:17 +0800] "GET /resource/js/jquery.min.js HTTP/1.1" 200 95962 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "192.168.0.1"
修改后的日志格式
# 自定义格式
log_format main '$year-$month-$day $hour:$minutes:$seconds|$request_method|$request_uri|$http_host|$server_name|$status|$request_time|$remote_addr|$http_x_forwarded_for|$http_referer|$http_user_agent';
# 输出结果
2020-07-01 11:30:54|GET|/|www.baidu.com|www.baidu.com|304|0.000|127.0.0.1|192.168.0.1|-|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
2020-07-01 11:30:59|GET|/favicon.ico|www.baidu.com|www.baidu.com|200|0.000|127.0.0.1|192.168.0.1|https://www.www.com/|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
注意:
年月日这些时间变量均为自定义,需要在每一个server下面添加这个代码
server {
....
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;
}
....
}
nginx内置变量
| 变量名称 | 变量描述 |
|---|---|
| $arg_PARAMETER | 客户端GET请求中PARAMETER 字段的值 |
| $args | 客户端请求中的参数 |
| $binary_remote_addr | 远程地址的二进制表示 |
| $body_bytes_sent | 已发送的消息体字节数 |
| $content_length | HTTP请求信息中content-length的字段 |
| $content_type | 请求信息中content-type字段 |
| $cookie_COOKIE | 客户端请求中COOKIE头域的值 |
| $document_root | 针对当前请求的根路径设置值 |
| $document_uri | 与$uri相同 |
| $host | 请求信息中的host头域,如果请求中没有Host行,则等于设置的服务器名 |
| $http_HEADER | HTTP请求信息里的HEADER地段 |
| $http_host | 与$host相同,但是如果请求信息中没有host行,则可能不同客户端cookie信息 |
| $http_cookie | 客户端cookie信息 |
| $http_referer | 客户端是从哪一个地址跳转过来的 |
| $http_user_agent | 客户端代理信息,也就是你客户端浏览器 |
| $http_via | 最后一个访问服务器的IP |
| $http_x_forwarded_for | 相当于访问网路访问的路径 |
| $is_args | 如果有args的值,则等于”?”,否则为空 |
| $limit_rate | 对连接速率的限制 |
| $nginx_version | 当前Nginx的版本 |
| $pid | 当前Nginx服务器的进程的进程ID |
| $query_string | 与$args相同 |
| $remote_addr | 客户端IP地址 |
| $remote_port | 客户端的端口 |
| $remote_user | 客户端的用户名,用于 auth basic module验证 |
| $request | 客户端请求 |
| $request_body | 客户端发送的报文体 |
| $request_body_file | 发送后端服务器的本地临时缓存文件的名称 |
| $request_filename | 当前请求的文件路径名,由root或alias指令与URI请求生成 |
| $request_method | 请求后端数据的方法,例如”GET”,”POST” |
| $request_uri | 请求的URI,带参数,不包含主机名 |
| $scheme | 所用的协议,如http或者HTTPS,比如rewrite^(.+)$$scheme://mysite.name$redirect |
| $sent_http_cache_control | 对应http请求头中的Cache-Control,需要打开chrome浏览器,右键检查,选中network,点中其中一个请求的资源 |
| $sent_http_connection | 对应http请求中的Connection |
| $sent_http_content_type | 对应http请求中的Content-Type |
| $sent_last_modified | 对应请求中的Last-Modified |
| $server_addr | 服务端的地址 |
| $server_name | 请求到达的服务器名 |
| $server_port | 请求到达服务器端口号 |
| $server_protocol | 请求协议的版本号,HTTP1.0/HTTP1.1 |
| $uri | 请求的不带请求参数的URI,可能和最初的值有不同,比如经过重定向之类的 |
参数和执行流程说明
log_format main '$year-$month-$day-$hour:$minutes:$seconds|$request_method|$request_uri|$http_host|$server_name|$status|$request_time|$remote_addr|$http_x_forwarded_for|$http_referer|$http_user_agent';
main # 表示给当前格式的命名
$year-$month-$day-$hour:$minutes:$seconds # 使用自己定义的变量
$request_method # 请求方法,比如GET或者POST
$request_uri # 请求URI
$http_host # 请求信息中的host
$server_name # 实际nginx匹配到的host(因为一个server可以有多个name,这个时候貌似输出的是第一个name,所以多个的时候可能会和$http_host不一致)
$status # 返回的http状态码
$request_time # 请求所花费的时间
$remote_addr # 正常请求中的客户端ip地址,但是如果经过反向代理,这个时候是127.0.0.1
$http_x_forwarded_for # 如果经过反向代理,这个字段可以拿到原本的ip地址
$http_referer # 来源地址,如果是通过其他网页来源访问到的,这里可以看到
$http_user_agent # 浏览器请求头
---
再说明一下时间格式
nginx日志有默认两种时间格式可以选择(目前只查询到这两个)
$time_local
输出格式: 01/Jul/2020:10:56:37
$time_iso8601
2020-07-01T11:16:35+08:00
但是上面两种都不是我们想要的,我们想要的是这种格式
yyyy-MM-dd HH:mm:ss
2020-07-01 11:21:00
---
所以需要我们对日志进行设置
nginx中的变量都是全局变量,但是只会对当前共享,所以需要在每一个server中定义出对应的变量,这样在每次日志记录的时候就可以使用这些变量了。
如果觉得这种方法太麻烦,也可以使用自编译的nginx或者openresty,这样可以直接通过lua解决。
这个问题,也可以在源代码中修改格式,因为我们这边是通过yum安装的,同时为了通用性,就选择这种添加变量的方式解决。
如果觉得这段代码稍微有点长,不愿意接受
那么可以单独写一个配置文件,然后使用include的方式倒入
按照日期存放
按天分割日志
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
access_log /var/logs/nginx/access/$server_name_$year-$month-$day-access.log main;
按小时、分、秒分割
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;
}
access_log /var/logs/xxxx/access/xxxxx_xx_access_$year-$month-$day-$hour-$minutes-$seconds.log main;
不记录日志
# 对不需要记录访问日志的server添加这两个代码可以关闭日志记录
server {
....
#不记录访问日志
access_log off;
#不记录错误日志
error_log /dev/null;
....
}
其他注意事项
1. access日志修改目录后,记得要把访问权限给nginx的对应用户
chown nginx:nginx /usr/local/nginx/logs/acces
或者
chmod -R 777 /usr/local/nginx/logs/acceserror
2. 日志不能使用日期格式,这个没有办法
3. 错误日志虽然不能修改日期格式,但是可以修改文件路径
4. 需要在http下面添加root的对应路径,或者server下面添加,否则比如反向代理这种接口会无法写出日志
转载请注明出处,本文链接是:https://www.889blog.com/2020/07/01/Nginx日志配置和时间格式化/
给Nginx配置日志格式和调整日期格式的更多相关文章
- Nginx配置日志格式记录cookie
Nginx配置日志格式记录cookie1. 一般用来做UV统计,或者获取用户token等. 配置方式: 在nginx的配置文件中有个变量:$http_cookie来获取cookie的信息.配置方式很 ...
- eclipse/MyEclipse 日期格式、注释日期格式、时区问题
eclipse/MyEclipse 日期格式.注释日期格式.时区问题 在eclipse/MyEclipse中,如果你的注释或是运行System.out.print(new java.util.Date ...
- Nginx 配置日志路径(nginx.conf没有写log路径,所以debug的时候找不到日志)
缘由:nginx.conf没有写log路径,所以debug的时候找不到日志,遂在conf文件里写入了log路径 Setp1.nginx默认日志路径: /var/log/nginx Setp2.conf ...
- js 将long日期格式 转换为标准日期格式方法
我们经常在操作的时候会发现从后台传递到view层的json中datetime类型变成了long型,当然你也可以从后台先转为string类型,但是如果是从和数据库对应的object中封装的话,就不能再去 ...
- oracle日期格式和java日期格式区别 HH24:mm:ss和HH24:mi:ss的区别
转载自:https://blog.csdn.net/yubin_yubin/article/details/18655553 在日期数据库数据查询出来的时候经常会to_char()一下,格式化一下日期 ...
- EXCEL 调整日期格式
https://jingyan.baidu.com/article/647f0115ea31b67f2048a85a.html 先中数据(不带标题),点击菜单-数据-分列. 前2步不要做任何更改直接点 ...
- nginx 配置日志
http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $r ...
- Python 自用代码(调整日期格式)
2017年6月28日 to 2017-06-282017年10月27日 to 2017-10-272017年12月1日 to 2017-12-012017年7月1日 to 2017-07-01 #co ...
- js将long日期格式转换为标准日期格式
<script language="javascript"> //扩展Date的format方法 Date.prototype.format = function (f ...
随机推荐
- how to measure function performance in javascript
how to measure function performance in javascript Performance API Performance Timeline API Navigatio ...
- Sketch & UI & PS
Sketch & UI & PS app ui https://sketchapp.com/learn https://www.sketch.com/docs/ https://ske ...
- asm align 对齐数据
最大成员dword data: dd 1 db 2 align 4 dw 3 000E0010 - 01 00 00 00 000E0014 - 02 00 00 00 000E0018 - 03 0 ...
- react-app 编写测试
jest Enzyme 文档 为什么要写测试 单元测试(unit testing)指的是以软件的单元(unit)为单位,对软件进行测试.单元可以是一个函数,也可以是一个模块或组件.它的基本特征就是,只 ...
- 百度webuploader_c#实现文件分片上传思路
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CentOS 7.7上配置mysql
转载:https://www.cnblogs.com/VinsonYang/p/12333570.html 首先登陆到阿里云,进行远程连接,在这里我使用的是Xshell 6进行连接的. 参照https ...
- setScaledContents
ui->catchPhotoLabel_607->setPixmap(QPixmap::fromImage(*m_imageCatchtDefaultPhoto_607).scaled(Q ...
- Reactive Spring实战 -- 理解Reactor的设计与实现
Reactor是Spring提供的非阻塞式响应式编程框架,实现了Reactive Streams规范. 它提供了可组合的异步序列API,例如Flux(用于[N]个元素)和Mono(用于[0 | 1]个 ...
- selenium之元素定位的方法(二)
XPath定位是XML Path的缩写,称为XML路径语言,是在XML文档中查找信息的一种语言,可用来再XML文档中对元素和属性进行搜索.XPath使用路径表达式来选取XML文档中的节点或节点集. X ...
- Prometheus + Spring Boot 应用监控
1. Prometheus是什么 Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包.一言以蔽之,它是一套开源监控解决方案. Prometheus主要特性: 多维数据模型,其中包含 ...