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

golang中常見(jiàn)的logrus日志庫(kù)

 更新時(shí)間:2023年05月25日 08:28:49   作者:博客猿馬甲哥  
這篇文章主要介紹了golang中常見(jiàn)的logrus日志庫(kù)的相關(guān)資料,需要的朋友可以參考下

戰(zhàn)術(shù)臥倒

golang中常見(jiàn)的日志包是logrus, 根據(jù)logrus的胚子和我們的生產(chǎn)要求,給出一個(gè)生產(chǎn)可用的logrus實(shí)踐姿勢(shì)。

主謂賓定狀補(bǔ)

logrus是一個(gè)結(jié)構(gòu)化的、可插拔的、兼容golang標(biāo)準(zhǔn)log api的日志庫(kù)。

快速過(guò)一下能力

  • 支持對(duì)output=TTY增加關(guān)鍵字顏色
  • 內(nèi)置JSONFormatter和TextFormatter(默認(rèn))兩種Formatter
  • 支持輸出logger所在的函數(shù)行位置 log.SetReportCaller(true)
  • 可以兼容golang內(nèi)置的標(biāo)準(zhǔn)log庫(kù), 建議無(wú)腦替換
  • 鼓勵(lì)輸出可解析的日志字段,而不是大段的無(wú)法結(jié)構(gòu)化的文本日志
log.WithFields(log.Fields{
 "event": event,
 "topic": topic,
 "key": key,
}).Fatal("Failed to send event")

基于現(xiàn)狀,湊了6個(gè)錢包上生產(chǎn),下面給出一些自己的生產(chǎn)實(shí)踐。

添磚加瓦

1. logrus不支持滾動(dòng)日志

好馬配好鞍 https://github.com/lestrrat-go/file-rotatelogs 讓你下雨天不再哭泣。

它會(huì)根據(jù)配置自動(dòng)按照時(shí)間切分日志,并滾動(dòng)清理日志(不用配磁盤報(bào)警,不用擔(dān)心磁盤滿故障)。

logf, err := rotatelogs.New(
  	cfg.Log.LogDir+logName+".%Y%m%d%H%M",
  	rotatelogs.WithLinkName(cfg.Log.LogDir+logName),
  	rotatelogs.WithMaxAge(24*time.Hour),
  	rotatelogs.WithRotationTime(time.Hour),
  )
  if err != nil {
  	stdLog.Printf("failed to create rotatelogs: %s", err)
  	return
  }

2. 日志格式化

java生態(tài)默認(rèn)日志輸出格式:

11:44:44.827 WARN [93ef3E0120160803114444] [main] [ClassPathXmlApplicationContext] Exception encountered during context initialization - cancelling refresh attempt

在公司中javaer占據(jù)主流,故java的默認(rèn)格式就成了公司集中式日志的"標(biāo)準(zhǔn)"格式。

很明顯,logrus默認(rèn)的兩種Formatter都不匹配。

github.com/antonfisher/nested-logrus-formatter 讓你柳暗花明。

log.SetFormatter(&nested.Formatter{ // 嵌套日志兼容skynet日志格式
		HideKeys:        true,
		FieldsOrder:     []string{"region", "node", "topic"},
		TimestampFormat: "2006-01-02 15:04:05.000", // 顯示ms
	})

3. 自定義Hook用法:輸出默認(rèn)字段

寫本文的時(shí)候,發(fā)現(xiàn)logrus官方本身支持輸出默認(rèn)日志字段。

requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
requestLogger.Warn("something not great happened")

Hook: 通常 鉤子函數(shù)用于在觸發(fā)某種事件時(shí)附帶一些動(dòng)作。

logrus的Hook定義:logEntry滿足指定的logLevel日志時(shí), 你想要做的動(dòng)作(你甚至可以不設(shè)置output直接在hook輸出日志, 這就是內(nèi)置write hook的實(shí)現(xiàn))。

type Hook interface {
	Levels() []Level
	Fire(*Entry) error
}

示例代碼為logLevel>=info的logEntry,固定了2個(gè)日志字段。

type FixedFieldHook struct {
	LogLevels  []logrus.Level
	FixedField map[string]string
}

// Fire will be called when some logging function is called with current hook
// It will format log entry to string and write it to appropriate writer
func (hook *FixedFieldHook) Fire(entry *logrus.Entry) error {
	for k, v := range hook.FixedField {
		entry.Data[k] = v
	}
	return nil
}

log.AddHook(&FixedFieldHook{ // Set fixed field
		FixedField: map[string]string{"region": cfg.LocalRegion, "node": ip},
		LogLevels: []logrus.Level{
			logrus.InfoLevel,
			logrus.ErrorLevel,
			logrus.WarnLevel,
			logrus.FatalLevel,
		},
	})

拋磚引玉,戰(zhàn)術(shù)臥倒。

到此這篇關(guān)于golang中常見(jiàn)的logrus日志庫(kù)的文章就介紹到這了,更多相關(guān)golang中l(wèi)ogrus日志庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言清除文件中空行的方法

    Go語(yǔ)言清除文件中空行的方法

    這篇文章主要介紹了Go語(yǔ)言清除文件中空行的方法,實(shí)例分析了Go語(yǔ)言針對(duì)文件的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 解決GO編譯時(shí)避免引入外部動(dòng)態(tài)庫(kù)的問(wèn)題

    解決GO編譯時(shí)避免引入外部動(dòng)態(tài)庫(kù)的問(wèn)題

    最近碰到一個(gè)問(wèn)題,有一個(gè)流量采集的組件中使用到了github.com/google/gopacket 這個(gè)庫(kù),這個(gè)庫(kù)使用一切正常,但是唯獨(dú)有一個(gè)缺點(diǎn),編譯后的二進(jìn)制文件依賴于libpcap.so的動(dòng)態(tài)庫(kù),這篇文章主要介紹了GO編譯時(shí)避免引入外部動(dòng)態(tài)庫(kù)的解決方法,需要的朋友可以參考下
    2022-10-10
  • 本地使用Docker搭建go開(kāi)發(fā)環(huán)境的全過(guò)程

    本地使用Docker搭建go開(kāi)發(fā)環(huán)境的全過(guò)程

    最近想學(xué)習(xí)一下golang,自己之前一直把環(huán)境全部安裝在docker上,所以這次也想把golang的環(huán)境安裝在docker上,下面這篇文章主要給大家介紹了關(guān)于本地使用Docker搭建go開(kāi)發(fā)環(huán)境的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Golang使用第三方包viper讀取yaml配置信息操作

    Golang使用第三方包viper讀取yaml配置信息操作

    這篇文章主要介紹了Golang使用第三方包viper讀取yaml配置信息操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang定制化zap日志庫(kù)使用過(guò)程分析

    Golang定制化zap日志庫(kù)使用過(guò)程分析

    Zap是我個(gè)人比較喜歡的日志庫(kù),是uber開(kāi)源的,有較好的性能,在項(xiàng)目開(kāi)發(fā)中,經(jīng)常需要把程序運(yùn)行過(guò)程中各種信息記錄下來(lái),有了詳細(xì)的日志有助于問(wèn)題排查和功能優(yōu)化,但如何選擇和使用性能好功能強(qiáng)大的日志庫(kù),這個(gè)就需要我們從多角度考慮
    2023-03-03
  • Golang教程之不可重入函數(shù)的實(shí)現(xiàn)方法

    Golang教程之不可重入函數(shù)的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Golang教程之不可重入函數(shù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • golang連接sqlx庫(kù)的操作使用指南

    golang連接sqlx庫(kù)的操作使用指南

    這篇文章主要為大家介紹了golang連接sqlx庫(kù)的操作使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 使用systemd部署和守護(hù)golang應(yīng)用程序的操作方法

    使用systemd部署和守護(hù)golang應(yīng)用程序的操作方法

    systemd是一個(gè)流行的守護(hù)進(jìn)程管理器,可以輕松管理服務(wù)的啟動(dòng)、停止、重啟等操作,讓我們的應(yīng)用程序始終保持在線,本文介紹了如何使用systemd部署和守護(hù)golang應(yīng)用程序,感興趣的朋友一起看看吧
    2023-10-10
  • 關(guān)于go語(yǔ)言編碼需要放到src 文件夾下的問(wèn)題

    關(guān)于go語(yǔ)言編碼需要放到src 文件夾下的問(wèn)題

    這篇文章主要介紹了go語(yǔ)言編碼需要放到src 文件夾下的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Go語(yǔ)言實(shí)現(xiàn)一個(gè)Http?Server框架(一)?http庫(kù)的使用

    Go語(yǔ)言實(shí)現(xiàn)一個(gè)Http?Server框架(一)?http庫(kù)的使用

    本文主要介紹用Go語(yǔ)言實(shí)現(xiàn)一個(gè)Http?Server框架中對(duì)http庫(kù)的基本使用說(shuō)明,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以借鑒一下
    2023-04-04

最新評(píng)論