日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Nginx自定义日志中时间格式

發布時間:2023/11/20 windows 27 coder
生活随笔 收集整理的這篇文章主要介紹了 Nginx自定义日志中时间格式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

工作需要對接內部的日志中臺,對日志打印有固定的格式要求,為了使Nginx的access日志也能被采集,需要對日志格式進行自定義,要求日志格式為:

yyyy-MM-dd HH:mm:ss.SSS LOG_LEVEL LOG_MSG ---> 時間格式+打印級別+業務日志

如:

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"

時間格式無法不符合要求,并且未區分日志級別,因此,需要對日志打印格式進行自定義

自定義日志格式配置

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,在下面的配置中,將其設置為yyyy-MM-dd HH:mm:ss.SSS格式
2.自定義了$log_level,為日志打印級別,下面的配置中,將按照請求響應碼來判斷為何種日志打印級別

以上只是為了滿足日志采集需要,其他字段可按實際情況變動

2.定義時間格式的轉換

Nginx默認支持的時間格式為iso8601,此處我們需要通過獲取到內置時間變量$time_iso8601$msec,具體配置如下:

點擊查看代碼
# 將iso8601格式時間轉換為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.根據響應碼定義日志級別

Nginx的access日志默認是沒有日志級別這一說法的,此處可視為我們為了適配業務而做的規則,在我們的使用場景中,將返回碼為4或5的請求,視為錯誤,打印為ERROR級別,其他請求為INFO級別

點擊查看代碼
# 如果http返回碼為4或5開頭,則設置log_level為ERROR,否則為INFO
map $status $log_level {
  ~^[45] ERROR;
  default INFO;
}

# 此處$status為Nginx內置變量,代表請求的響應碼,log_level為自定義變量

4.設置日志使用具體格式并打印到文件

點擊查看代碼
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.日志打印效果

總結

以上是生活随笔為你收集整理的Nginx自定义日志中时间格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。