成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Nginx map 實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換

開發(fā) 前端
最近我們需要把 Nginx 的日志接入到自研的日志采集平臺(tái)上,但是這個(gè)平臺(tái)只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式。

哈嘍大家好,我是咸魚

最近我們需要把 Nginx 的日志接入到自研的日志采集平臺(tái)上,但是這個(gè)平臺(tái)只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式

例如下面這樣的效果

剛開始在主配置文件 nginx.conf 中定義了一個(gè)名叫 json 的日志格式字段

驗(yàn)證的時(shí)候其他內(nèi)容沒啥問題,但是時(shí)間是2023-09-12T13:54:22+08:00 這樣子的,不太符合預(yù)期

咸魚想著把 $time_iso8601 變量中的年月日時(shí)分秒分別提取出來然后用變量去接受它,如下所示:

我自定義了一個(gè)時(shí)間格式 $year-$month-$day $hour:$minutes:$seconds:000,然后接著用了一個(gè) if 語句用于檢查請(qǐng)求的時(shí)間是否匹配 ISO8601 時(shí)間格式(例如:2023-09-12T13:54:22+08:00)

如果匹配,它將執(zhí)行其中的代碼塊。在代碼塊中,使用正則表達(dá)式提取時(shí)間的年、月、日、小時(shí)、分鐘和秒,并將它們賦值給變量 $year、$month、$day、$hour、$minutes 和 $seconds

但是 nginx -t 檢測(cè)的時(shí)候我發(fā)現(xiàn) if 語句不能夠放在 http 塊內(nèi),否則會(huì)報(bào)錯(cuò)

在 Nginx 中,if 語句主要用于在 server 或 location 塊內(nèi)設(shè)置條件,以便根據(jù)請(qǐng)求的屬性來執(zhí)行不同的配置。if 語句通常應(yīng)該包含在 server 或 location 塊內(nèi),而不是直接放在 http 塊中

如果將 if 語句放在一個(gè)一個(gè) server 塊中,這不得累死我(有很多個(gè) server 塊),而且后期維護(hù)也不方便

所以如何將自定義變量在全局配置中生效則成為了一個(gè)問題

map

map 指令是由 ngx_http_map_module 模塊提供的,是 Nginx 配置文件中的一種用于創(chuàng)建變量映射的指令

模塊鏈接:https://nginx.org/en/docs/http/ngx_http_map_module.html

它允許我們將一個(gè)或多個(gè)輸入值映射到一個(gè)輸出值,類似于字典或哈希表的概念。map 指令通常用于根據(jù)特定條件為請(qǐng)求設(shè)置自定義變量,或者執(zhí)行基于請(qǐng)求屬性的條件控制

比較常見的 map 用法是通過 map 來實(shí)現(xiàn)允許多個(gè)域名跨域訪問的問題

語法如下:

其中:

  • $variable 輸入變量,通常是 nginx 的內(nèi)置變量。
  • $new_variable 輸出變量,它將根據(jù)輸入值的映射設(shè)置為特定的結(jié)果。
  • value1, value2, ... 輸入值,可以列出多個(gè)值。
  • result1, result2, ... 與相應(yīng)輸入值相關(guān)聯(lián)的輸出結(jié)果。
  • default 一個(gè)可選項(xiàng),表示如果沒有匹配的輸入值,將使用默認(rèn)結(jié)果

需要注意的是,map 只能放在 http 塊中

有了 map,我們就可以輕易的把 $time_iso8601 變量中的 ISO 8601 格式的時(shí)間戳轉(zhuǎn)換為指定的時(shí)間格式,然后存儲(chǔ)到自定義變量 $log_time 中

我們可以看到:

  • 輸入變量為 $time_iso8601,輸出變量為 $log_time;
  • default "":如果沒有匹配任何條件,將使用空字符串作為 $log_time 的值
  • "~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2})":這是一個(gè)正則表達(dá)式條件,它用于匹配 ISO 8601 格式的時(shí)間戳。該正則表達(dá)式包含了多個(gè)捕獲組(使用 ?<name> 語法),用于從時(shí)間戳中提取年、月、日、小時(shí)、分鐘和秒的值
  • "${year}-${month}-${day} ${hour}:${minutes}:${seconds}":這是與正則表達(dá)式條件匹配時(shí)設(shè)置的輸出值。當(dāng)正則表達(dá)式條件匹配時(shí),它會(huì)將捕獲組中提取的年、月、日、小時(shí)、分鐘和秒的值組合成一個(gè)自定義的時(shí)間格式,然后將該值設(shè)置為 $log_time 變量的值

例如,如果 $time_iso8601 的值是 "2023-09-09T14:30:00",則 $log_time 將被設(shè)置為 "2023-09-09 14:30:00"

然后我們?cè)侔?$log_time 放進(jìn)我們自定義的日志格式里面,完整配置如下

最后我們驗(yàn)證一下

責(zé)任編輯:武曉燕 來源: 咸魚運(yùn)維雜談
相關(guān)推薦

2024-07-09 09:08:36

golang簽名參數(shù)簽名時(shí)間

2022-06-29 14:06:54

canvas鴻蒙

2024-09-09 14:57:31

2009-07-31 14:09:41

c#時(shí)間格式轉(zhuǎn)換

2009-07-30 15:57:30

C#時(shí)間

2024-12-13 09:42:38

javascripmatch方法

2021-10-15 09:00:02

Python日期轉(zhuǎn)換Python基礎(chǔ)

2011-07-22 17:52:46

iPhone 時(shí)間 控件

2011-08-22 10:59:42

SQL Server日期時(shí)間格式轉(zhuǎn)換字符串

2010-09-14 14:32:02

sql server日

2010-05-11 10:22:43

Mysql日期

2009-07-31 13:48:09

C#時(shí)間轉(zhuǎn)換

2024-09-03 10:06:43

JavaMap項(xiàng)目

2024-05-06 09:26:06

Rust語言編碼

2022-09-05 08:06:36

SpringBoot時(shí)間格式化

2009-12-24 15:59:46

WPF圖像格式

2009-07-31 13:52:32

C#時(shí)間函數(shù)C#時(shí)間格式

2010-09-16 13:22:03

Sql Server日

2017-09-12 16:31:21

TensorFlowLSTMCNN

2020-11-03 10:21:33

MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91在线看片| 一级黄色毛片免费 | 亚洲中国字幕 | 亚洲3级| 一区免费视频 | 日韩欧美精品在线 | 成人国产精品一级毛片视频毛片 | 国产精品a免费一区久久电影 | 久久久成人免费视频 | 欧洲精品视频一区 | 少妇一级淫片免费放播放 | 日本手机看片 | 激情av在线| av高清毛片 | 91在线免费观看 | 91视频在线看 | 成人欧美一区二区三区白人 | 色精品| 超碰97av| 免费污视频 | 国产精品视频一区二区三区 | 亚洲男人天堂网 | 久久精品国产一区 | 日日干天天操 | 天天干狠狠 | 国产成人福利 | 亚洲网视频 | 亚洲欧美激情精品一区二区 | 日韩在线精品 | a毛片视频网站 | 欧美成人高清 | 超碰97人人人人人蜜桃 | 大香在线伊779| 久久久久国产一级毛片 | 国产日韩一区二区三免费 | 精品不卡| 亚洲一区二区免费 | 久久不卡日韩美女 | 日本久久精 | 国产精品99久久免费观看 | 国产成人99久久亚洲综合精品 |