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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章