forked from toolshed/abra
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
|  *
 | |
|  * 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 grpclog
 | |
| 
 | |
| import (
 | |
| 	"io"
 | |
| 	"os"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 
 | |
| 	"google.golang.org/grpc/grpclog/internal"
 | |
| )
 | |
| 
 | |
| // LoggerV2 does underlying logging work for grpclog.
 | |
| type LoggerV2 internal.LoggerV2
 | |
| 
 | |
| // SetLoggerV2 sets logger that is used in grpc to a V2 logger.
 | |
| // Not mutex-protected, should be called before any gRPC functions.
 | |
| func SetLoggerV2(l LoggerV2) {
 | |
| 	if _, ok := l.(*componentData); ok {
 | |
| 		panic("cannot use component logger as grpclog logger")
 | |
| 	}
 | |
| 	internal.LoggerV2Impl = l
 | |
| 	internal.DepthLoggerV2Impl, _ = l.(internal.DepthLoggerV2)
 | |
| }
 | |
| 
 | |
| // 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 NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 {
 | |
| 	return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{})
 | |
| }
 | |
| 
 | |
| // NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and
 | |
| // verbosity level.
 | |
| func NewLoggerV2WithVerbosity(infoW, warningW, errorW io.Writer, v int) LoggerV2 {
 | |
| 	return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{Verbosity: v})
 | |
| }
 | |
| 
 | |
| // newLoggerV2 creates a loggerV2 to be used as default logger.
 | |
| // All logs are written to stderr.
 | |
| func newLoggerV2() LoggerV2 {
 | |
| 	errorW := io.Discard
 | |
| 	warningW := io.Discard
 | |
| 	infoW := io.Discard
 | |
| 
 | |
| 	logLevel := os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL")
 | |
| 	switch logLevel {
 | |
| 	case "", "ERROR", "error": // If env is unset, set level to ERROR.
 | |
| 		errorW = os.Stderr
 | |
| 	case "WARNING", "warning":
 | |
| 		warningW = os.Stderr
 | |
| 	case "INFO", "info":
 | |
| 		infoW = os.Stderr
 | |
| 	}
 | |
| 
 | |
| 	var v int
 | |
| 	vLevel := os.Getenv("GRPC_GO_LOG_VERBOSITY_LEVEL")
 | |
| 	if vl, err := strconv.Atoi(vLevel); err == nil {
 | |
| 		v = vl
 | |
| 	}
 | |
| 
 | |
| 	jsonFormat := strings.EqualFold(os.Getenv("GRPC_GO_LOG_FORMATTER"), "json")
 | |
| 
 | |
| 	return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{
 | |
| 		Verbosity:  v,
 | |
| 		FormatJSON: jsonFormat,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // 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.
 | |
| type DepthLoggerV2 internal.DepthLoggerV2
 |