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 중국어 웹사이트의 기타 관련 기사를 참조하세요!