主頁(yè) > 知識(shí)庫(kù) > 使用Lumberjack+zap進(jìn)行日志切割歸檔操作

使用Lumberjack+zap進(jìn)行日志切割歸檔操作

熱門標(biāo)簽:谷歌美發(fā)店地圖標(biāo)注 地圖區(qū)域圖標(biāo)注后導(dǎo)出 官渡電銷外呼管理系統(tǒng)怎么收費(fèi) 利用地圖標(biāo)注位置 赤峰電銷 400開頭電話怎樣申請(qǐng) 杭州人工智能電銷機(jī)器人費(fèi)用 江蘇呼叫中心外呼系統(tǒng)有效果嗎 貴州電話智能外呼系統(tǒng)

使用Lumberjack+zap進(jìn)行日志切割歸檔

為了添加日志切割歸檔功能,我們將使用第三方庫(kù)Lumberjack來實(shí)現(xiàn)。

安裝

執(zhí)行下面的命令安裝Lumberjack

go get -u github.com/natefinch/lumberjack

zap logger中加入Lumberjack

要在zap中加入Lumberjack支持,我們需要修改WriteSyncer代碼。我們將按照下面的代碼修改getLogWriter()函數(shù):

func getLogWriter() zapcore.WriteSyncer {
 lumberJackLogger := lumberjack.Logger{
 Filename: "./test.log",
 MaxSize: 10,
 MaxBackups: 5,
 MaxAge:  30,
 Compress: false,
 }
 return zapcore.AddSync(lumberJackLogger)
}

Lumberjack Logger采用以下屬性作為輸入:

Filename: 日志文件的位置

MaxSize:在進(jìn)行切割之前,日志文件的最大大?。ㄒ訫B為單位)

MaxBackups:保留舊文件的最大個(gè)數(shù)

MaxAges:保留舊文件的最大天數(shù)

Compress:是否壓縮/歸檔舊文件

測(cè)試所有功能

package main
import (
 "net/http"
 "go.uber.org/zap"
 "go.uber.org/zap/zapcore"
 lumberjack "gopkg.in/natefinch/lumberjack.v2"
)
var sugarLogger *zap.SugaredLogger
func main() {
 InitLogger()
 defer sugarLogger.Sync()
 for i:=0; i  10000;i++ {
 simpleHttpGet("www.baidu.com")
 simpleHttpGet("http://www.baidu.com")
 }
}
func InitLogger() {
 writeSyncer := getLogWriter()
 encoder := getEncoder()
 core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
 logger := zap.New(core, zap.AddCaller())
 sugarLogger = logger.Sugar()
}
func getEncoder() zapcore.Encoder {
 encoderConfig := zap.NewProductionEncoderConfig()
 encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
 encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
 return zapcore.NewConsoleEncoder(encoderConfig)
}
func getLogWriter() zapcore.WriteSyncer {
 lumberJackLogger := lumberjack.Logger{
 Filename: "/aseit-data/gocode/src/gitlab.aseit.cn/AI_PRODUCT/psd_be_zhang/test/test.log", // ⽇志⽂件路徑
 MaxSize: 1,  // 1M=1024KB=1024000byte
 MaxBackups: 5,  // 最多保留5個(gè)備份
 MaxAge:  30,  // days
 Compress: false, // 是否壓縮 disabled by default
 }
 return zapcore.AddSync(lumberJackLogger)
}
func simpleHttpGet(url string) {
 sugarLogger.Debugf("Trying to hit GET request for %s", url)
 resp, err := http.Get(url)
 if err != nil {
 sugarLogger.Errorf("Error fetching URL %s : Error = %s", url, err)
 } else {
 sugarLogger.Infof("Success! statusCode = %s for URL %s", resp.Status, url)
 resp.Body.Close()
 }
}

同時(shí),可以在main函數(shù)中循環(huán)記錄日志,測(cè)試日志文件是否會(huì)自動(dòng)切割和歸檔(日志文件每1MB會(huì)切割并且在當(dāng)前目錄下最多保存5個(gè)備份)。

補(bǔ)充:golang zap日志的使用

zap是一個(gè)高性能日志庫(kù),github鏈接【傳送門】,下面簡(jiǎn)單介紹一下zap的使用。

1.下載zap包

因?yàn)閦ap是uber開源的,zap內(nèi)使用的包是在go.uber.org/zap,如果直接go get這個(gè)包,可能會(huì)提示get不下來??梢詆o get github.com/uber-go/zap,然后再把zap目錄復(fù)制到src/go.uber.org下(可能還會(huì)需要go.uber.org/atomic和go.uber.org/multierr,均可參考該方法get下來)

2.zap簡(jiǎn)單封裝示例。

package logger
 
import (
 "go.uber.org/zap"
 "go.uber.org/zap/zapcore"
 "gopkg.in/natefinch/lumberjack.v2"
)
 
// error logger
var errorLogger *zap.SugaredLogger
 
var levelMap = map[string]zapcore.Level{
 "debug": zapcore.DebugLevel,
 "info": zapcore.InfoLevel,
 "warn": zapcore.WarnLevel,
 "error": zapcore.ErrorLevel,
 "dpanic": zapcore.DPanicLevel,
 "panic": zapcore.PanicLevel,
 "fatal": zapcore.FatalLevel,
}
 
func getLoggerLevel(lvl string) zapcore.Level {
 if level, ok := levelMap[lvl]; ok {
 return level
 }
 return zapcore.InfoLevel
}
 
func init() {
 fileName := "zap.log"
 level := getLoggerLevel("debug")
 syncWriter := zapcore.AddSync(lumberjack.Logger{
 Filename: fileName,
 MaxSize: 1  30, //1G
 LocalTime: true,
 Compress: true,
 })
 encoder := zap.NewProductionEncoderConfig()
 encoder.EncodeTime = zapcore.ISO8601TimeEncoder
 core := zapcore.NewCore(zapcore.NewJSONEncoder(encoder), syncWriter, zap.NewAtomicLevelAt(level))
 logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
 errorLogger = logger.Sugar()
}
 
func Debug(args ...interface{}) {
 errorLogger.Debug(args...)
}
 
func Debugf(template string, args ...interface{}) {
 errorLogger.Debugf(template, args...)
}
 
func Info(args ...interface{}) {
 errorLogger.Info(args...)
}
 
func Infof(template string, args ...interface{}) {
 errorLogger.Infof(template, args...)
}
 
func Warn(args ...interface{}) {
 errorLogger.Warn(args...)
}
 
func Warnf(template string, args ...interface{}) {
 errorLogger.Warnf(template, args...)
}
 
func Error(args ...interface{}) {
 errorLogger.Error(args...)
}
 
func Errorf(template string, args ...interface{}) {
 errorLogger.Errorf(template, args...)
}
 
func DPanic(args ...interface{}) {
 errorLogger.DPanic(args...)
}
 
func DPanicf(template string, args ...interface{}) {
 errorLogger.DPanicf(template, args...)
}
 
func Panic(args ...interface{}) {
 errorLogger.Panic(args...)
}
 
func Panicf(template string, args ...interface{}) {
 errorLogger.Panicf(template, args...)
}
 
func Fatal(args ...interface{}) {
 errorLogger.Fatal(args...)
}
 
func Fatalf(template string, args ...interface{}) {
 errorLogger.Fatalf(template, args...)
}

3.簡(jiǎn)單封裝后使用示例:

package main
 
import (
 "logger"
)
 
func main() {
 logger.Infof("simple zap logger example") 
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解
  • golang的time包:秒、毫秒、納秒時(shí)間戳輸出方式
  • golang 使用time包獲取時(shí)間戳與日期格式化操作
  • golang return省略用法說明
  • golang有用的庫(kù)及工具 之 zap.Logger包的使用指南

標(biāo)簽:保定 泰安 武漢 松原 河池 鷹潭 黔西 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用Lumberjack+zap進(jìn)行日志切割歸檔操作》,本文關(guān)鍵詞  使用,Lumberjack+zap,進(jìn)行,日志,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用Lumberjack+zap進(jìn)行日志切割歸檔操作》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于使用Lumberjack+zap進(jìn)行日志切割歸檔操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章