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에 사용하는 로거를 따로 설정 후 사용해준 예제입니다.
[Go Lang] Go Schedule 1개씩 실행하기 (0) | 2022.09.07 |
---|---|
[GoLang] DB 작업 중, Null 처리에 대한 문제 해결 (0) | 2022.08.31 |
Golang 의 DB관련 라이브러리 GORM (0) | 2022.08.30 |
[Go Lang] Delay 줘서 함수 실행시키기 (0) | 2022.08.26 |
[Go Log]Go Log library 사용하기 (0) | 2022.08.18 |