golang notes(10)---add Zap Logger to ngapp

本文档介绍了如何将Zap日志器集成到ngapp中,提供了在main函数中初始化Zap日志器的方法,并提到所有源代码已推送到GitHub仓库https://github.com/zhenggao2/ngapp.git。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

part of utils/zaplog.go:

// NewZapLogger initializes then returns a zap.Logger.
func NewZapLogger(path string) *zap.Logger {
	dir := filepath.Dir(path)
	if exist, _ := exists(dir); !exist {
		if err := os.MkdirAll(dir, 0775); err != nil {
			panic(fmt.Sprintf("Fail to create log directory: %v", err))
		}
	}

	_, close, err := zap.Open(path)
	if err != nil {
		close()
		panic(fmt.Sprintf("Fail to create/open log file: %v", err))
	}

	encoderConfig := zapcore.EncoderConfig{
		TimeKey:        "time",
		LevelKey:       "level",
		NameKey:        "logger",
		CallerKey:      "caller",
		MessageKey:     "msg",
		StacktraceKey:  "stacktrace",
		LineEnding:     zapcore.DefaultLineEnding,
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.ISO8601TimeEncoder,
		EncodeDuration: zapcore.StringDurationEncoder,
		EncodeCaller:   zapcore.FullCallerEncoder,
	}

	atom := zap.NewAtomicLevelAt(zap.DebugLevel)

	config := zap.Config{
		Level:            atom,
		Development:      true,
		//DisableCaller: false,
		//DisableStacktrace: false,
		//Sampling: nil,
		Encoding:         "json",
		EncoderConfig:    encoderConfig,
		OutputPaths:      []string{path},
		ErrorOutputPaths: []string{"stderr"},
		InitialFields:    map[string]interface{}{"serviceName": "ngapp"},
	}

	logger, err := config.Build()
	if err != nil {
		panic(fmt.Sprintf("Fail to initialize logger: %v", err))
	}

	defer logger.Sync()
	logger.Info("Logger initialized.")

	return logger
}

How to integrate Zap logger into ngapp?

app.logger = logger.WithOptions(zap.Hooks(func(entry zapcore.Entry) error {
		// don't print debug/info on ngapp UI
		if entry.Level < zap.WarnLevel {
			return nil
		} else {
			app.logEdit.Append(fmt.Sprintf("<b>[%v]</b> : %v : %v : %s", entry.Level.CapitalString(), entry.Time.Format("2006-01-02 15:04:05.999"), entry.Caller.TrimmedPath(), entry.Message))
			app.logEdit.Append(entry.Stack)
			return nil
		}
	}))

Initialize zap logger at main:

logger := utils.NewZapLogger(fmt.Sprintf("./logs/ngapp_%v.log", time.Now().Format("20060102_150406")))

All source code will be pushed to github: https://github.com/zhenggao2/ngapp.git

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值