>  기사  >  백엔드 개발  >  Go에서 비활성화된 추적 로깅 문의 비용을 최소화하는 방법은 무엇입니까?

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

Susan Sarandon
Susan Sarandon원래의
2024-11-03 19:02:031100검색

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 자체를 부울로 정의하여 자세한 내용을 줄이면서 로깅을 제어하는 ​​간결한 방법을 제공하는 것입니다.

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

var debug Log = false

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

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

위 내용은 Go에서 비활성화된 추적 로깅 문의 비용을 최소화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.