hoony's web study

728x90
반응형

로그 라이브러리 선택 

Go 에서 가장 많이 사용한다고 하는 uber-go를 사용하기로 결정을 했습니다. 

https://github.com/uber-go/zap

 

GitHub - uber-go/zap: Blazing fast, structured, leveled logging in Go.

Blazing fast, structured, leveled logging in Go. Contribute to uber-go/zap development by creating an account on GitHub.

github.com

go get -u go.uber.org/zap

위의 코드를 이용해서 의존성을 프로젝트에 주입시켜줍니다.

우버에서 만든 log 관련 package 는 파일을 저장하는 기능이 없으므로 저는 다른 패키지를 하나더 가지고 와서 만들어보았습니다.

https://github.com/lestrrat-go/file-rotatelogs

 

GitHub - lestrrat-go/file-rotatelogs: [ARCHIVED] Port of perl5 File::RotateLogs to Go

[ARCHIVED] Port of perl5 File::RotateLogs to Go. Contribute to lestrrat-go/file-rotatelogs development by creating an account on GitHub.

github.com

위의 라이브러리는 시간 기반 로테이션을 제공하는 라이브러리입니다. 
이 두개의 라이브러리를 복합해서 파일을 남기고 사용하고자 합니다.

구현 소스 

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

 

[Go/Golang] Zap과 시간 기반 파일 로테이션 로깅 수행하기

본 포스트는 'dhwaneetbhatt'의 Time based log file rotation with zap 글을 번역한 것임을 밝힙니다. Zap과 시간 기반의 파일 로테이션 로깅 zap은 현재까지도 잘 개발되어오고 있고, 성능 측면에서도 훌륭한 Go.

wookiist.dev

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading