Untitled
unknown
golang
a year ago
2.6 kB
9
Indexable
package pkg import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func CreateLogger(level, format string) *zap.Logger { // Выбираем, куда писать логи - в stdout или stderr. // Для общего логгера подойдет stdout stdout := zapcore.AddSync(os.Stdout) // Создаем из zap стандартную конфигурацию, // production это info-уровень, есть еще dev - там debug cfg := zap.NewProductionEncoderConfig() // zap проставляет сам несколько параметров при логировании // Здесь мы указываем, с каким заголовком эти поля писать cfg.TimeKey = "ts" cfg.CallerKey = "caller" cfg.LevelKey = "level" cfg.MessageKey = "msg" // Здесь мы ставим, как выводить уровент (выделять цветом + писать капсом) cfg.EncodeLevel = zapcore.CapitalColorLevelEncoder // Здесь как писать время: можно unix.Timestamp, мы пишем в удобоваримом варианте cfg.EncodeTime = zapcore.ISO8601TimeEncoder logLevel := setLevel(level) // Создаем энкодер здесь (см. функцию) encoder := createEncoder(cfg, format) // Здесь объединяем все логгеры в один // Может быть много core, например, один пишет в stdout для людей, другой - в файл для роботов. core := zapcore.NewTee( zapcore.NewCore(encoder, stdout, logLevel), ) // Создаем итоговый логгер return zap.New(core) } // Здесь на основе текстового параметра создаем уровень логирования func setLevel(logLevel string) (level zapcore.Level) { switch logLevel { case "debug": level = zapcore.DebugLevel case "info": level = zapcore.InfoLevel case "warn": level = zapcore.WarnLevel case "error": level = zapcore.ErrorLevel case "fatal": level = zapcore.FatalLevel default: level = zapcore.InfoLevel } return } // Здесь создаем энкодер // Если текстовый, то пишет понятно человеку, если json - пишет в json-формате. func createEncoder(cfg zapcore.EncoderConfig, format string) (enc zapcore.Encoder) { switch format { case "text": enc = zapcore.NewConsoleEncoder(cfg) case "json": enc = zapcore.NewJSONEncoder(cfg) default: enc = zapcore.NewConsoleEncoder(cfg) } return }
Editor is loading...
Leave a Comment