Nginx自定義日志中時間格式的操作方法
背景
工作需要對接內(nèi)部的日志中臺,對日志打印有固定的格式要求,為了使Nginx的access日志也能被采集,需要對日志格式進行自定義,要求日志格式為:
yyyy-MM-dd HH:mm:ss.SSS LOG_LEVEL LOG_MSG ---> 時間格式+打印級別+業(yè)務(wù)日志
如:
23-11-18 17:34:23.738 DEBUG monitor-7 org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug:137: xxxxx
但目前我們Nginx按照默認格式配置,大致如下:
192.23.4.5 -- [18/Nov/2023L18:58:52 +0800] "GET /api/cluster HTTP/1.1" 200 155 "https://xxx.xx.xx.x"
時間格式無法不符合要求,并且未區(qū)分日志級別,因此,需要對日志打印格式進行自定義
自定義日志格式配置
1.重新定義日志格式
# 原日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "http_referer" "$http_user_agent" "$http_x_forwarded_for"; # 修改后日志格式 log_format main '$time_zh_ms $log_level - $remote_addr - $remote_user "$request" $status $body_bytes_sent "http_referer" "$http_user_agent" "$http_x_forwarded_for"; # 對比修改前后差異,其實就是 1.自定義了$time_zh_ms,在下面的配置中,將其設(shè)置為yyyy-MM-dd HH:mm:ss.SSS格式 2.自定義了$log_level,為日志打印級別,下面的配置中,將按照請求響應(yīng)碼來判斷為何種日志打印級別 以上只是為了滿足日志采集需要,其他字段可按實際情況變動
2.定義時間格式的轉(zhuǎn)換
Nginx默認支持的時間格式為iso8601,此處我們需要通過獲取到內(nèi)置時間變量$time_iso8601和$msec,具體配置如下:
# 將iso8601格式時間轉(zhuǎn)換為yyyy-MM-dd HH:mm:ss格式 # 按照正則將時間字符串分割為6部分,分別為年月日時分秒,再拼接到$time_zh自定義變量中 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; set $time_zh "$1-$2-$3 $4:$5:$6"; } # 獲取毫秒時間戳,并拼接到$time_zh之后 if ($msec ~ "(\d+)\.(\d+)") { set $time_zh_ms $time_zh.$2 } # 注意:$time_zh_ms其實就是在log_format中定義的日志格式第一個字段
3.根據(jù)響應(yīng)碼定義日志級別
Nginx的access日志默認是沒有日志級別這一說法的,此處可視為我們?yōu)榱诉m配業(yè)務(wù)而做的規(guī)則,在我們的使用場景中,將返回碼為4或5的請求,視為錯誤,打印為ERROR級別,其他請求為INFO級別
# 如果http返回碼為4或5開頭,則設(shè)置log_level為ERROR,否則為INFO map $status $log_level { ~^[45] ERROR; default INFO; } # 此處$status為Nginx內(nèi)置變量,代表請求的響應(yīng)碼,log_level為自定義變量
4.設(shè)置日志使用具體格式并打印到文件
access_log /dev/stdout main; access_log /etc/nginx/logs/access.log main; error_log /dev/stdout; error_log /etc/nginx/logs/error.log;
5.完整配置示例截圖
6.日志打印效果
到此這篇關(guān)于Nginx自定義日志中時間格式的文章就介紹到這了,更多相關(guān)nginx自定義日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx+tomcat實現(xiàn)Windows系統(tǒng)下的負載均衡搭建教程
下面小編就為大家分享一篇nginx+tomcat實現(xiàn)Windows系統(tǒng)下的負載均衡搭建教程,具有很好的參考價值,希望對大家有所幫助2017-12-12利用Nginx處理Vue開發(fā)環(huán)境的跨域的方法
這篇文章主要介紹了利用Nginx處理Vue開發(fā)環(huán)境的跨域的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境
這篇文章主要介紹了nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境,幫助大家選擇符合需求的服務(wù)器,感興趣的朋友可以了解下2020-10-10nginx、Apache、IIS服務(wù)器解決 413 Request Entity Too Large問題方法匯總
這篇文章主要介紹了nginx、Apache、IIS三種服務(wù)器解決413 Request Entity Too Large問題的方法集合,需要的朋友可以參考下2014-05-05nginx 配置虛擬主機,實現(xiàn)在一個服務(wù)器可以訪問多個網(wǎng)站的方法
下面小編就為大家分享一篇nginx 配置虛擬主機,實現(xiàn)在一個服務(wù)器可以訪問多個網(wǎng)站的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12