Go 에서 가장 많이 사용한다고 하는 uber-go를 사용하기로 결정을 했습니다.
https://github.com/uber-go/zap
go get -u go.uber.org/zap
위의 코드를 이용해서 의존성을 프로젝트에 주입시켜줍니다.
우버에서 만든 log 관련 package 는 파일을 저장하는 기능이 없으므로 저는 다른 패키지를 하나더 가지고 와서 만들어보았습니다.
https://github.com/lestrrat-go/file-rotatelogs
위의 라이브러리는 시간 기반 로테이션을 제공하는 라이브러리입니다.
이 두개의 라이브러리를 복합해서 파일을 남기고 사용하고자 합니다.
func Info(message string, fields ...zap.Field) {
config := zap.NewProductionConfig()
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.TimeKey = "timestamp"
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.StacktraceKey = ""
config.EncoderConfig = encoderConfig
//log.Info(message, fields...)
logFile := "/var/logs/goscheduler/app-%Y-%m-%d_Info.log"
rotator, err := rotatelogs.New(
logFile,
rotatelogs.WithMaxAge(1*24*time.Hour),
rotatelogs.WithRotationTime(1*24*time.Hour))
if err != nil {
panic(err)
}
w := zapcore.AddSync(rotator)
core := zapcore.NewCore(
zapcore.NewJSONEncoder(encoderConfig),
w,
zap.InfoLevel)
logger := zap.New(core)
logger.Info(message)
}
위의 소스는 아마 보시면 아실꺼에요.
rotatelogs.WithMaxAge => 파일이 언제 삭제되는 것을 의미합니다.
rotatelogs.WithRotationTime(time option) => 파일이 얼마에 한번씩 변경이 될런지를 의미합니다.
위의 소스를 가지고 로그를 남기고 운영환경에서 테스트를 해보니 잘 나오더라구요 ^^
저 처럼 혹시라도 Go 를 가지고 Log를 파일로 남기고자 하시는 분들은 참고 하시면 됩니다.
참고한 URL
https://wookiist.dev/110
Golang 의 DB관련 라이브러리 GORM (0) | 2022.08.30 |
---|---|
[Go Lang] Delay 줘서 함수 실행시키기 (0) | 2022.08.26 |
[Go] Post로 파라미터 보내는 방법 (0) | 2022.08.11 |
[Go Lang] map[sting]interface{} 형을 string으로 받는 방법 (0) | 2022.08.08 |
[Go Build] How to Go Build for linux (0) | 2022.07.13 |