Golang implements log writing function

1. Create a new logconfig folder

2. Create a new logconfig.go under the logconfig folder

package logconfig

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
	"sync"
)

var SugarLogger *zap.SugaredLogger
var wg sync.WaitGroup

func InitLogger() {
	encoderConfig := zapcore.EncoderConfig{
		TimeKey:        "time",
		LevelKey:       "level",
		NameKey:        "name",
		CallerKey:      "line",
		MessageKey:     "msg",
		FunctionKey:    "func",
		StacktraceKey:  "stacktrace",
		LineEnding:     zapcore.DefaultLineEnding,
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
		EncodeDuration: zapcore.SecondsDurationEncoder,
		EncodeCaller:   zapcore.FullCallerEncoder,
		EncodeName:     zapcore.FullNameEncoder,
	}
	writeSyncer := getLogWriter()
	encoder := zapcore.NewJSONEncoder(encoderConfig)
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)

	logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.WarnLevel))
	SugarLogger = logger.Sugar()
}

func getEncoder() zapcore.Encoder {
	return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
}

func getLogWriter() zapcore.WriteSyncer {
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "/data/agent_logs/go_xxxx.log", //日志文件的位置
		MaxSize:    100,                             //在进行切割之前,日志文件的最大大小(以MB为单位)
		MaxBackups: 30,                              //保留旧文件的最大个数
		MaxAge:     30,                              //保留旧文件的最大天数
		Compress:   true,                            //是否压缩/归档旧文件
	}
	return zapcore.NewMultiWriteSyncer(zapcore.AddSync(lumberJackLogger), zapcore.AddSync(os.Stdout))
}

3. Initialize and use the log library in main.go

func main() {
    //初始化日志
	logconfig.InitLogger()

	logconfig.SugarLogger.Info("程序启动了......")
}

Guess you like

Origin blog.csdn.net/banzhuantuqiang/article/details/131403454