decred.org/dcrwallet/v3@v3.1.0/internal/rpc/rpcserver/log.go (about) 1 // Copyright (c) 2015-2016 The btcsuite developers 2 // Copyright (c) 2018 The Decred devlopers 3 // 4 // Permission to use, copy, modify, and distribute this software for any 5 // purpose with or without fee is hereby granted, provided that the above 6 // copyright notice and this permission notice appear in all copies. 7 // 8 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 16 package rpcserver 17 18 import ( 19 "os" 20 "strings" 21 22 "github.com/decred/slog" 23 "google.golang.org/grpc/grpclog" 24 ) 25 26 // UseLogger sets the logger to use for the gRPC server. 27 func UseLogger(l slog.Logger) { 28 grpclog.SetLogger(logger{l}) 29 } 30 31 // logger uses a slog.Logger to implement the grpclog.Logger interface. 32 type logger struct { 33 slog.Logger 34 } 35 36 // stripGrpcPrefix removes the package prefix for all logs made to the grpc 37 // logger, since these are already included as the slog subsystem name. 38 func stripGrpcPrefix(logstr string) string { 39 return strings.TrimPrefix(logstr, "grpc: ") 40 } 41 42 // stripGrpcPrefixArgs removes the package prefix from the first argument, if it 43 // exists and is a string, returning the same arg slice after reassigning the 44 // first arg. 45 func stripGrpcPrefixArgs(args ...interface{}) []interface{} { 46 if len(args) == 0 { 47 return args 48 } 49 firstArgStr, ok := args[0].(string) 50 if ok { 51 args[0] = stripGrpcPrefix(firstArgStr) 52 } 53 return args 54 } 55 56 func (l logger) Fatal(args ...interface{}) { 57 l.Critical(stripGrpcPrefixArgs(args)...) 58 os.Exit(1) 59 } 60 61 func (l logger) Fatalf(format string, args ...interface{}) { 62 l.Criticalf(stripGrpcPrefix(format), args...) 63 os.Exit(1) 64 } 65 66 func (l logger) Fatalln(args ...interface{}) { 67 l.Critical(stripGrpcPrefixArgs(args)...) 68 os.Exit(1) 69 } 70 71 func (l logger) Print(args ...interface{}) { 72 l.Info(stripGrpcPrefixArgs(args)...) 73 } 74 75 func (l logger) Printf(format string, args ...interface{}) { 76 l.Infof(stripGrpcPrefix(format), args...) 77 } 78 79 func (l logger) Println(args ...interface{}) { 80 l.Info(stripGrpcPrefixArgs(args)...) 81 }