hoony's web study

728x90
반응형


Zap

zap은 uber에서 만든 오픈소스 라이브러리로써, 편한 가독성과 좋은 성능으로 사용에 매우 좋습니다.

 

사용기

package zaplogger

import (
	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"time"
)

var myConsoleLogger *zap.Logger
var myFileLogger *zap.Logger

func init() {

	logFile := "./var/log/app-%Y-%m-%d-%H.log"
	rotator, err := rotatelogs.New(
		logFile,
		rotatelogs.WithMaxAge(60*24*time.Hour),
		rotatelogs.WithRotationTime(time.Hour))
	if err != nil {
		panic(err)
	}
	//파일 로거 정의
	encoderCfg := zapcore.EncoderConfig{
		MessageKey:     "msg",
		LevelKey:       "level",
		NameKey:        "logger",
		TimeKey:        "timestamp",
		CallerKey:      "caller",
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.ISO8601TimeEncoder,
		EncodeDuration: zapcore.StringDurationEncoder,
	}

	logCore := zapcore.NewCore(
		zapcore.NewJSONEncoder(encoderCfg),
		zapcore.AddSync(rotator),
		zap.InfoLevel)

	myFileLogger = zap.New(logCore)

	//콘솔 로거 정의
	config := zap.NewProductionConfig()
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.TimeKey = "timestamp"
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.StacktraceKey = ""
	config.EncoderConfig = encoderConfig

	myConsoleLogger, err = config.Build(zap.AddCallerSkip(1))
	if err != nil {
		panic(err)
	}
}

func Info(message string, fields ...zap.Field) {
	myConsoleLogger.Info(message, fields...)
	myFileLogger.Info(message, fields...)
}

func Debug(message string, fields ...zap.Field) {
	myConsoleLogger.Debug(message, fields...)
	myFileLogger.Debug(message, fields...)
}

func Warn(message string, fields ...zap.Field) {
	myConsoleLogger.Warn(message, fields...)
	myFileLogger.Warn(message, fields...)
}

func Panic(message string, fields ...zap.Field) {
	myConsoleLogger.Panic(message, fields...)
	myFileLogger.Panic(message, fields...)
}

func Error(message string, fields ...zap.Field) {
	myConsoleLogger.Error(message, fields...)
	myFileLogger.Error(message, fields...)
}

func Fatal(message string, fields ...zap.Field) {
	myConsoleLogger.Fatal(message, fields...)
	myFileLogger.Fatal(message, fields...)
}

위와같이, Static 함수로써 기존에 자주 사용하는 함수를 한번 더 만들어 주었습니다.

거기에 File 과 Console에 사용하는 로거를 따로 설정 후 사용해준 예제입니다.

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading