自定義Nginx日誌格式

reggie發表於2021-07-08

有時候需要自定義下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 )

相關文章