2012-11-21 4 views
9

Go에서 로깅을 수행하는 관용적 인 방법은 무엇입니까?Go 라이브러리에서 관용적 로깅을 구현하는 방법은 무엇입니까?

+0

더 많은 기능을 완벽하게 구현하는 제 3 자 라이브러리가 있습니다. 예를 들어, 표준 라이브러리에서 사용자 지정 서식 및 로그 수준 (디버그, 정보 등)에 대한 편리한 옵션을 놓친 다음 직접 자체 라이브러리 (go-log) (https://github.com/scale)를 구현합니다. -it/go-log). 그것을 한번보세요. –

답변

11

글로벌 변수 로거을 선언하는 파일을 만듭니다. 그런 다음 Go의 관용적 인 init() 기능을 사용하여 시작할 때 변수를 초기화하십시오.

logger.go :

package xxx 

import (
    "log" 
    "os" 
) 

var logger *log.Logger 
func init() { 
    logger = log.New(os.Stderr, "xxx: ", log.Ldate | log.Ltime | log.Lshortfile) 
} 

example.go는 :

func test() { 
    logger.Println("Logged") 
} 

은이 방법을 사용하면 하나에서 구성 할 수있는 단일 로거 구현을 사용할 수있는 혜택을 제공합니다 파일.

EDIT : ThomasKappler는 단일 글로벌 로거 만 사용하는 경우 로그 패키지의 내장 로거를 사용하고 SetFlags로 구성 할 수 있다고 지적했습니다. 유일한 차이점은 더 명시 적이어야하고 로그 패키지를 가져와야한다는 것입니다.

+11

하나의 글로벌 로거 만 사용하는 경우에는 자신 만의 로거를 건너 뛰고 log.Println 등과 같은 로그 패키지의 기능을 사용할 수 있습니다. log.SetFlags()를 사용하여 구성 할 수도 있습니다. –

+0

@ThomasKappler 고마워, 나는 그걸 몰랐다. 기존 기능을 손상시키지 않고 로거를 확장 할 수 있으므로이 방법을 사용하는 것이 더 좋습니다 (플러스 로그 패키지를 사방에 가져올 필요가 없습니다). – liamzebedee

관련 문제