"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 비활성화된 추적 로깅 문의 비용을 최소화하는 방법은 무엇입니까?

Go에서 비활성화된 추적 로깅 문의 비용을 최소화하는 방법은 무엇입니까?

2024-11-09에 게시됨
검색:151

How to Minimize the Cost of Disabled Trace Logging Statements in Go?

비활성화된 문을 위한 Go의 저비용 추적 로깅

Go에서 추적 로깅은 중요한 경로에서 비활성화된 로그 문 비용을 최소화하는 독특한 과제를 제시합니다. C/C와 달리 Go에는 전처리기 매크로가 없으므로 대체 솔루션을 모색해야 합니다.

한 가지 접근 방식은 fmt.Stringer 및 fmt.GoStringer 인터페이스를 사용하는 것입니다. 로그가 실행될 때까지 형식 지정을 지연하면 로깅 인수에서 비용이 많이 드는 함수 호출을 피할 수 있습니다.

type LogFormatter interface {
    LogFormat() string
}

// Inside the logger
if i, ok := i.(LogFormatter); ok {
    fmt.Println(i.LogFormat())
}

또 다른 전략은 로거 인터페이스를 사용하여 런타임에 또는 빌드 제약 조건을 사용하여 빌드 시 로거를 교체하는 것입니다. 그러나 이를 위해서는 로깅 인수에 비용이 많이 드는 호출이 삽입되지 않도록 해야 합니다.

세 ​​번째 옵션은 Logger 자체를 bool로 정의하여 자세한 내용을 줄이면서 로깅을 제어하는 ​​간결한 방법을 제공하는 것입니다.

type Log bool
func (l Log) Println(args ...interface{}) {
    fmt.Println(args...)
}

var debug Log = false

if debug {
    debug.Println("DEBUGGING")
}

마지막으로 코드 생성을 살펴볼 수 있지만 런타임 구성에는 적합하지 않습니다. gofmt -r을 사용하거나 텍스트/템플릿을 사용하여 파일을 빌드하면 특정 디버깅 시나리오에 대해 별도의 디버그 빌드를 생성할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3