濮阳杆衣贸易有限公司

主頁 > 知識庫 > 使用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開頭電話怎樣申請 杭州人工智能電銷機(jī)器人費(fèi)用 江蘇呼叫中心外呼系統(tǒng)有效果嗎 貴州電話智能外呼系統(tǒng)

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

為了添加日志切割歸檔功能,我們將使用第三方庫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:保留舊文件的最大個數(shù)

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

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

測試所有功能

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個備份
 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()
 }
}

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

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

zap是一個高性能日志庫,github鏈接【傳送門】,下面簡單介紹一下zap的使用。

1.下載zap包

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

2.zap簡單封裝示例。

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.簡單封裝后使用示例:

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

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

您可能感興趣的文章:
  • golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫logrus的詳解
  • golang的time包:秒、毫秒、納秒時間戳輸出方式
  • golang 使用time包獲取時間戳與日期格式化操作
  • golang return省略用法說明
  • golang有用的庫及工具 之 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)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用Lumberjack+zap進(jìn)行日志切割歸檔操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用Lumberjack+zap進(jìn)行日志切割歸檔操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    明溪县| 平湖市| 会泽县| 和政县| 栾川县| 邵东县| 呼伦贝尔市| 德昌县| 乌鲁木齐县| 辽阳县| 京山县| 叶城县| 高青县| 南江县| 乐东| 如东县| 确山县| 育儿| 阿拉善右旗| 黄平县| 甘肃省| 天镇县| 大同市| 太仆寺旗| 瓦房店市| 望都县| 滦南县| 安塞县| 鹤峰县| 进贤县| 乾安县| 平昌县| 宁海县| 尖扎县| 永顺县| 鸡东县| 福安市| 周至县| 嘉兴市| 井冈山市| 驻马店市|