有時候需要自定義下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 協議》,轉載必須註明作者和本文連結