自定义Nginx日志格式

有时候需要自定义下Nginx的日志格式,来满足自己的需求,刚好最近看到朋友写了几个Nginx的日志格式,很不错。

修改 nginx.conf 文件

http {
    # ...
    log_format  main '$remote_addr $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '$http_user_agent $http_x_forwarded_for $request_time $upstream_response_time $upstream_addr $upstream_status';

    # 为什么有的变量有双引号,有的没有呢?
    # 如果变量结果是数字的,就不需要双引号,变量是字符的,就需要双引号
    log_format apm '[$time_local]\tclient=$remote_addr\t'
       'request="$request"\t request_length=$request_length\t'
       'http_referer="$http_referer"\t'
       'bytes_sent=$bytes_sent\t'
       'body_bytes_sent=$body_bytes_sent\t'
       'user_agent="$http_user_agent"\t'
       'upstream_addr=$upstream_addr\t'
       'upstream_status=$upstream_status\t'
       'cookie="$http_cookie"\t'
       'request_body="$request_body"\t'
       'document_root="$document_root"\t'
       'fastcgi_script_name="$fastcgi_script_name"\t'
       'request_filename="$request_filename"\t'
       'request_time=$request_time\t'
       'upstream_response_time=$upstream_response_time\t'
       'upstream_connect_time=$upstream_connect_time\t'
       'upstream_header_time=$upstream_header_time\t';
}

上面配置了两个log_format,设置两个log_format的目的是为了让不同的后端的服务,使用不用日志格式。如果后端的server没有配置,就默认使用 main 标记的日志。

# 比如这样
access_log /var/log/nginx/access.log main;

# 或者这样
access_log /var/log/nginx/getip-access.log apm;

访问测试一下,结果:

client=192.168.1.100
request="GET / HTTP/1.1"         
request_length=452     
http_referer="-"        
bytes_sent=170  
body_bytes_sent=14      
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" 
upstream_addr=192.168.1.80:8080      
upstream_status=200     
cookie="-"      
request_body="-"        
document_root="/etc/nginx/html" 
fastcgi_script_name="/" 
request_filename="/etc/nginx/html/"      
request_time=5.006      
upstream_response_time=5.006    
upstream_connect_time=0.000     
upstream_header_time=5.006
本作品采用《CC 协议》,转载必须注明作者和本文链接
微信公众号:码咚没 ( ID: codingdongmei )
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!