Golang 할당하지 않는 json 로그 zerolog 라이브러리 알아보기

오늘은 Golang으로 할당하지 않고 빠르게 json 로그를 남길 수 있는 zerolog 라이브러리를 알아보려 합니다.

zerolog 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 zerolog 패키지를 설치합니다.

go get -u github.com/rs/zerolog/log

홈의 go 폴더에 zerolog 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"os"

	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
)

os, zerolog를 가져옵니다.

func main() {
	zerolog.TimeFieldFormat = zerolog.TimeFormatUnix

UNIX Time으로 맞춰줍니다.

	log.Print("Print")

기본적으로 debug 레벨로 설정되어 있는 Print로 로그를 출력하게 할 수 있습니다.

	log.Info().Str("strKey", "strVal").Msg("Msg")

컨텍스트로 특정 타입의 변수를 키와 값으로 저장할 수 있습니다.

	zerolog.SetGlobalLevel(zerolog.InfoLevel)
	log.Info().Msg("Info")

특정 레벨의 로그만 보이게 전역적으로 설정할 수 있습니다.

	logger := zerolog.New(os.Stderr).With().Timestamp().Logger()
	logger.Info().Str("strKey", "strVal").Msg("Msg")

	logger = log.With().Str("strKey", "strVal").Logger()
	logger.Info().Msg("Msg")

Logger()로 인하여 logger 객체를 생성해서 출력할 수 있습니다.

	log.Info().Str("strKey", "strVal").
		Dict("dict", zerolog.Dict().
			Str("strKey", "strVal"),
		).Msg("Msg")

dictionary를 포함하여 로그를 출력할 수 있습니다.

	sampled := log.Sample(&zerolog.BasicSampler{N: 10})
	sampled.Info().Msg("Msg")

로그를 샘플링할 수 있습니다.

	log.Logger = log.With().Caller().Logger()
	log.Info().Msg("Msg")

파일의 로그가 작성되어 있는 라인 넘버를 같이 포함하여 로그를 출력할 수 있습니다.

	zerolog.TimestampFieldName = "TimestampFieldName"
	zerolog.LevelFieldName = "LevelFieldName"
	zerolog.MessageFieldName = "MessageFieldName"
	log.Info().Msg("Msg")

필드의 이름을 커스터마이징할 수 있습니다.

	log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
	log.Info().Str("strKey", "strVal").Msg("Msg")
}

출력의 모양에 변화를 줄 수 있습니디.

Written on September 25, 2019