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