欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx自定義日志中時(shí)間格式的操作方法

 更新時(shí)間:2023年11月25日 09:56:28   作者:成王敗寇~  
工作需要對(duì)接內(nèi)部的日志中臺(tái),對(duì)日志打印有固定的格式要求,為了使Nginx的access日志也能被采集,需要對(duì)日志格式進(jìn)行自定義,這篇文章主要介紹了Nginx自定義日志中時(shí)間格式,需要的朋友可以參考下

背景

工作需要對(duì)接內(nèi)部的日志中臺(tái),對(duì)日志打印有固定的格式要求,為了使Nginx的access日志也能被采集,需要對(duì)日志格式進(jìn)行自定義,要求日志格式為:

yyyy-MM-dd HH:mm:ss.SSS LOG_LEVEL LOG_MSG ---> 時(shí)間格式+打印級(jí)別+業(yè)務(wù)日志

如:

23-11-18 17:34:23.738 DEBUG monitor-7 org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug:137: xxxxx

但目前我們Nginx按照默認(rèn)格式配置,大致如下:

192.23.4.5 -- [18/Nov/2023L18:58:52 +0800] "GET /api/cluster HTTP/1.1" 200 155 "https://xxx.xx.xx.x"

時(shí)間格式無(wú)法不符合要求,并且未區(qū)分日志級(jí)別,因此,需要對(duì)日志打印格式進(jìn)行自定義

自定義日志格式配置

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";
# 對(duì)比修改前后差異,其實(shí)就是
1.自定義了$time_zh_ms,在下面的配置中,將其設(shè)置為yyyy-MM-dd HH:mm:ss.SSS格式
2.自定義了$log_level,為日志打印級(jí)別,下面的配置中,將按照請(qǐng)求響應(yīng)碼來(lái)判斷為何種日志打印級(jí)別
以上只是為了滿足日志采集需要,其他字段可按實(shí)際情況變動(dòng)

2.定義時(shí)間格式的轉(zhuǎn)換

Nginx默認(rèn)支持的時(shí)間格式為iso8601,此處我們需要通過(guò)獲取到內(nèi)置時(shí)間變量$time_iso8601和$msec,具體配置如下:

# 將iso8601格式時(shí)間轉(zhuǎn)換為yyyy-MM-dd HH:mm:ss格式
# 按照正則將時(shí)間字符串分割為6部分,分別為年月日時(shí)分秒,再拼接到$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";
}
# 獲取毫秒時(shí)間戳,并拼接到$time_zh之后
if ($msec ~ "(\d+)\.(\d+)") {
  set $time_zh_ms $time_zh.$2
}
# 注意:$time_zh_ms其實(shí)就是在log_format中定義的日志格式第一個(gè)字段

3.根據(jù)響應(yīng)碼定義日志級(jí)別

Nginx的access日志默認(rèn)是沒(méi)有日志級(jí)別這一說(shuō)法的,此處可視為我們?yōu)榱诉m配業(yè)務(wù)而做的規(guī)則,在我們的使用場(chǎng)景中,將返回碼為4或5的請(qǐng)求,視為錯(cuò)誤,打印為ERROR級(jí)別,其他請(qǐng)求為INFO級(jí)別

# 如果http返回碼為4或5開(kāi)頭,則設(shè)置log_level為ERROR,否則為INFO
map $status $log_level {
  ~^[45] ERROR;
  default INFO;
}
# 此處$status為Nginx內(nèi)置變量,代表請(qǐng)求的響應(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自定義日志中時(shí)間格式的文章就介紹到這了,更多相關(guān)nginx自定義日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論