时间:2021-05-22
使用Lumberjack+zap进行日志切割归档
为了添加日志切割归档功能,我们将使用第三方库Lumberjack来实现。
安装
执行下面的命令安装Lumberjack
go get -u github.com/natefinch/lumberjack
zap logger中加入Lumberjack
要在zap中加入Lumberjack支持,我们需要修改WriteSyncer代码。我们将按照下面的代码修改getLogWriter()函数:
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:在进行切割之前,日志文件的最大大小(以MB为单位)
MaxBackups:保留旧文件的最大个数
MaxAges:保留旧文件的最大天数
Compress:是否压缩/归档旧文件
测试所有功能
package mainimport ( "net/http" "go.uber.org/zap" "go.uber.org/zap/zapcore" lumberjack "gopkg.in/natefinch/lumberjack.v2")var sugarLogger *zap.SugaredLoggerfunc main() { InitLogger() defer sugarLogger.Sync() for i:=0; i < 10000;i++ { simpleHttpGet("press: 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") }以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Linux下nginx生成日志自动切割的实现方法1、编辑切割日志的shell程序,目录自定#vi/data/nginx/cut_nginx_log.sh输入代码
本文主要介绍Golang中最佳日志解决方案,包括常用日志包logrus的基本使用,如何结合file-rotatelogs包实现日志文件的轮转切割两大话题。Gol
Tomcat日志切割logrotate是个强大的系统软件,它对日志文件有着一套完整的操作模式,譬如:转储、邮件和压缩等,并且默认logrotate加到cron(
zap.Logger是go语言中相对日志库中性能最高的。那么如何开始使用?不多说直接上代码:import("encoding/json""fmt""log""g
一、编写拆分脚本(splitNginxLog.sh)*因为本例中设置每天0点进行日志的拆分,所以folder和rq均设置采用昨天的日期进行归档。#!/bin/b