>  기사  >  백엔드 개발  >  gRPC 미들웨어에서 Uber/Zap 로깅을 사용하여 Go에서 실제 오류 소스를 가져옵니다.

gRPC 미들웨어에서 Uber/Zap 로깅을 사용하여 Go에서 실제 오류 소스를 가져옵니다.

王林
王林앞으로
2024-02-09 13:18:08419검색

使用 gRPC 中间件中的 Uber/Zap 日志记录获取 Go 中的实际错误源

이 기사에서는 PHP 편집자 Zimo가 gRPC 미들웨어 사용 시 Uber/Zap 로깅을 사용하여 Go 언어에서 실제 오류 소스를 얻는 방법을 소개합니다. 이 미들웨어를 사용하면 코드의 오류를 더 잘 이해하고 추적할 수 있으므로 문제를 더 빠르게 찾아 해결할 수 있습니다. 이 문서에서는 Uber/Zap 로깅을 구성 및 사용하는 방법과 gRPC 요청 및 응답에서 오류 정보를 캡처하고 기록하는 방법을 자세히 설명합니다. 이러한 기술을 익히면 gRPC 애플리케이션의 디버깅 및 오류 처리 기능을 향상시킬 수 있습니다.

질문내용

로깅을 위해 uber/zap 패키지를 사용하고 있습니다. 내 디자인에서는 grpc 패키지 미들웨어의 모든 오류를 기록합니다. 오류가 발생한 파일과 줄 번호를 기록하고 싶습니다. 그러나 현재는 현재 미들웨어의 파일 이름과 줄 번호만 가져올 수 있습니다. 오류의 실제 원인을 확인할 수 있는 방법이 있습니까?

func RegisterLogger(c config.Config) *zap.SugaredLogger {

    var logger *zap.Logger
    var err error
    if c.IsDebug {
        logger, err = zap.NewDevelopment()
    } else {
        logger, err = zap.NewProduction()
    }

    if err != nil {
        panic(err)
    }
    defer logger.Sync()

    return logger.Sugar()
}



func (s *ProviderServer) Pay(ctx context.Context, in *payment.PayRequest) (string, error) {
    resp, err := ctx.Value(in.Provider).(provider.IPayment).Exec(ctx, in)

    if err != nil {
            pc, file, line, ok := runtime.Caller(2)
            if ok {
                file = filepath.Base(file)
                nowTime := time.Now().Format("2006/01/02 15:04:05")
                funcName := runtime.FuncForPC(pc).Name()
                funcName = filepath.Ext(funcName)
                funcName = strings.TrimPrefix(funcName, ".")
                s.log.Info("Times:", i, " nowTime:", nowTime, " file:", file, " line:", line, " funcName:", funcName, " err:", err)
            }
        
//Log the error information, including which file the error comes from.

        return resp.Result, err
    } else {
        s.log.Info("resp:", resp)
    }

}

해결 방법

현재 구현에서는 오류가 발생한 파일과 줄 번호를 기록하려고 합니다. 그러나 귀하가 얻는 정보는 현재 미들웨어에 대한 것이며 오류의 실제 원인이 아닙니다.

오류의 실제 원인에 대한 파일 및 줄 정보를 얻으려면 pkg/errors 패키지를 사용할 수 있습니다. 이 패키지는 오류를 래핑하고 파일 및 줄 정보를 보존하는 방법을 제공합니다. 이를 달성하기 위해 코드를 수정하는 방법의 예는 다음과 같습니다.

으아악

errors.wrap 函数包装错误,您可以将文件和行信息添加到错误中。然后,当使用 s.log.errorw를 사용하여 오류를 기록할 때 로그 메시지에는 오류가 발생한 파일 및 줄 정보를 포함하여 전체 스택 추적이 포함됩니다.

이 방법으로 errors 패키지에서 제공하는 정보를 사용하여 오류의 실제 원인을 추적할 수 있습니다.

위 내용은 gRPC 미들웨어에서 Uber/Zap 로깅을 사용하여 Go에서 실제 오류 소스를 가져옵니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제