Untitled
unknown
golang
a year ago
2.6 kB
21
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