package log import ( "context" "github.com/sirupsen/logrus" "google.golang.org/grpc/grpclog" ) type logrusWrapper struct { *logrus.Entry } // V provides the functionality that returns whether a particular log level is at // least l - this is needed to meet the LoggerV2 interface. GRPC's logging levels // are: https://github.com/grpc/grpc-go/blob/master/grpclog/loggerv2.go#L71 // 0=info, 1=warning, 2=error, 3=fatal // logrus's are: https://github.com/sirupsen/logrus/blob/master/logrus.go // 0=panic, 1=fatal, 2=error, 3=warn, 4=info, 5=debug func (lw logrusWrapper) V(l int) bool { // translate to logrus level logrusLevel := 4 - l return int(lw.Logger.Level) <= logrusLevel } func init() { ctx := WithModule(context.Background(), "grpc") // completely replace the grpc logger with the logrus logger. grpclog.SetLoggerV2(logrusWrapper{Entry: G(ctx)}) }