zap是uber開源的Go高性能日誌庫
封裝
package log
import (
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
logger *zap.Logger
automicLevel = zap.NewAtomicLevelAt(zapcore.InfoLevel)
)
func init() {
writeSyncer := zapcore.AddSync(os.Stdout)
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.SecondsDurationEncoder,
EncodeCaller: zapcore.FullCallerEncoder,
EncodeName: zapcore.FullNameEncoder,
}
encoder := zapcore.NewJSONEncoder(encoderConfig)
core := zapcore.NewCore(
encoder,
writeSyncer,
automicLevel)
logger = zap.New(core, zap.AddCaller(), zap.Development(), zap.AddCallerSkip(1))
}
var levelMap = map[string]zapcore.Level{
"debug": zapcore.DebugLevel,
"info": zapcore.InfoLevel,
"warn": zapcore.WarnLevel,
"error": zapcore.ErrorLevel,
"dpanic": zapcore.DPanicLevel,
"panic": zapcore.PanicLevel,
"fatal": zapcore.FatalLevel,
}
func SetLevel(s string) {
if level, ok := levelMap[s]; ok {
automicLevel.SetLevel(level)
}
automicLevel.SetLevel(zapcore.InfoLevel)
}
func Field(key string, val interface{}) zap.Field {
return zap.Any(key, val)
}
func Debug(msg string, fields ...zap.Field) {
logger.Debug(msg, fields...)
}
func Info(msg string, fields ...zap.Field) {
logger.Info(msg, fields...)
}
func Warn(msg string, fields ...zap.Field) {
logger.Warn(msg, fields...)
}
func Error(msg string, fields ...zap.Field) {
logger.Error(msg, fields...)
}
func DPanic(msg string, fields ...zap.Field) {
logger.DPanic(msg, fields...)
}
func Panic(msg string, fields ...zap.Field) {
logger.Panic(msg, fields...)
}
func Fatal(msg string, fields ...zap.Field) {
logger.Fatal(msg, fields...)
}
使用
package main
import (
log
)
func main() {
log.Info("hello world")
log.SetLevel("warn")
log.Info("hi", log.Field("name", "wss"))
}