/* * * Copyright 2017 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */package grpclogimport ()// LoggerV2 does underlying logging work for grpclog.typeLoggerV2interface {// Info logs to INFO log. Arguments are handled in the manner of fmt.Print.Info(args ...interface{})// Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println.Infoln(args ...interface{})// Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf.Infof(format string, args ...interface{})// Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print.Warning(args ...interface{})// Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println.Warningln(args ...interface{})// Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf.Warningf(format string, args ...interface{})// Error logs to ERROR log. Arguments are handled in the manner of fmt.Print.Error(args ...interface{})// Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println.Errorln(args ...interface{})// Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf.Errorf(format string, args ...interface{})// Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code.Fatal(args ...interface{})// Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code.Fatalln(args ...interface{})// Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code.Fatalf(format string, args ...interface{})// V reports whether verbosity level l is at least the requested verbose level.V(l int) bool}// SetLoggerV2 sets logger that is used in grpc to a V2 logger.// Not mutex-protected, should be called before any gRPC functions.func ( LoggerV2) {if , := .(*componentData); {panic("cannot use component logger as grpclog logger") }grpclog.Logger = grpclog.DepthLogger, _ = .(grpclog.DepthLoggerV2)}const (// infoLog indicates Info severity.infoLogint = iota// warningLog indicates Warning severity.warningLog// errorLog indicates Error severity.errorLog// fatalLog indicates Fatal severity.fatalLog)// severityName contains the string representation of each severity.varseverityName = []string{infoLog: "INFO",warningLog: "WARNING",errorLog: "ERROR",fatalLog: "FATAL",}// loggerT is the default logger used by grpclog.typeloggerTstruct {m []*log.LoggervintjsonFormatbool}// NewLoggerV2 creates a loggerV2 with the provided writers.// Fatal logs will be written to errorW, warningW, infoW, followed by exit(1).// Error logs will be written to errorW, warningW and infoW.// Warning logs will be written to warningW and infoW.// Info logs will be written to infoW.func (, , io.Writer) LoggerV2 {returnnewLoggerV2WithConfig(, , , loggerV2Config{})}// NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and// verbosity level.func (, , io.Writer, int) LoggerV2 {returnnewLoggerV2WithConfig(, , , loggerV2Config{verbose: })}typeloggerV2Configstruct {verboseintjsonFormatbool}func (, , io.Writer, loggerV2Config) LoggerV2 {var []*log.Logger := log.LstdFlagsif .jsonFormat { = 0 } = append(, log.New(, "", )) = append(, log.New(io.MultiWriter(, ), "", )) := io.MultiWriter(, , ) // ew will be used for error and fatal. = append(, log.New(, "", )) = append(, log.New(, "", ))return &loggerT{m: , v: .verbose, jsonFormat: .jsonFormat}}// newLoggerV2 creates a loggerV2 to be used as default logger.// All logs are written to stderr.func () LoggerV2 { := io.Discard := io.Discard := io.Discard := os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL")switch {case"", "ERROR", "error": // If env is unset, set level to ERROR. = os.Stderrcase"WARNING", "warning": = os.Stderrcase"INFO", "info": = os.Stderr }varint := os.Getenv("GRPC_GO_LOG_VERBOSITY_LEVEL")if , := strconv.Atoi(); == nil { = } := strings.EqualFold(os.Getenv("GRPC_GO_LOG_FORMATTER"), "json")returnnewLoggerV2WithConfig(, , , loggerV2Config{verbose: ,jsonFormat: , })}func ( *loggerT) ( int, string) { := severityName[]if !.jsonFormat { .m[].Output(2, fmt.Sprintf("%v: %v", , ))return }// TODO: we can also include the logging component, but that needs more // (API) changes. , := json.Marshal(map[string]string{"severity": ,"message": , }) .m[].Output(2, string())}func ( *loggerT) ( ...interface{}) { .output(infoLog, fmt.Sprint(...))}func ( *loggerT) ( ...interface{}) { .output(infoLog, fmt.Sprintln(...))}func ( *loggerT) ( string, ...interface{}) { .output(infoLog, fmt.Sprintf(, ...))}func ( *loggerT) ( ...interface{}) { .output(warningLog, fmt.Sprint(...))}func ( *loggerT) ( ...interface{}) { .output(warningLog, fmt.Sprintln(...))}func ( *loggerT) ( string, ...interface{}) { .output(warningLog, fmt.Sprintf(, ...))}func ( *loggerT) ( ...interface{}) { .output(errorLog, fmt.Sprint(...))}func ( *loggerT) ( ...interface{}) { .output(errorLog, fmt.Sprintln(...))}func ( *loggerT) ( string, ...interface{}) { .output(errorLog, fmt.Sprintf(, ...))}func ( *loggerT) ( ...interface{}) { .output(fatalLog, fmt.Sprint(...))os.Exit(1)}func ( *loggerT) ( ...interface{}) { .output(fatalLog, fmt.Sprintln(...))os.Exit(1)}func ( *loggerT) ( string, ...interface{}) { .output(fatalLog, fmt.Sprintf(, ...))os.Exit(1)}func ( *loggerT) ( int) bool {return <= .v}// DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements// DepthLoggerV2, the below functions will be called with the appropriate stack// depth set for trivial functions the logger may ignore.//// # Experimental//// Notice: This type is EXPERIMENTAL and may be changed or removed in a// later release.typeDepthLoggerV2interface {LoggerV2// InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println.InfoDepth(depth int, args ...interface{})// WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println.WarningDepth(depth int, args ...interface{})// ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println.ErrorDepth(depth int, args ...interface{})// FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println.FatalDepth(depth int, args ...interface{})}
The pages are generated with Goldsv0.4.9. (GOOS=linux GOARCH=amd64)