decred.org/dcrwallet/v3@v3.1.0/log.go (about) 1 // Copyright (c) 2013-2017 The btcsuite developers 2 // Copyright (c) 2015-2018 The Decred developers 3 // Use of this source code is governed by an ISC 4 // license that can be found in the LICENSE file. 5 6 package main 7 8 import ( 9 "os" 10 11 "decred.org/dcrwallet/v3/chain" 12 "decred.org/dcrwallet/v3/internal/loader" 13 "decred.org/dcrwallet/v3/internal/loggers" 14 "decred.org/dcrwallet/v3/internal/rpc/jsonrpc" 15 "decred.org/dcrwallet/v3/internal/rpc/rpcserver" 16 "decred.org/dcrwallet/v3/internal/vsp" 17 "decred.org/dcrwallet/v3/p2p" 18 "decred.org/dcrwallet/v3/spv" 19 "decred.org/dcrwallet/v3/ticketbuyer" 20 "decred.org/dcrwallet/v3/wallet" 21 "decred.org/dcrwallet/v3/wallet/udb" 22 "github.com/decred/dcrd/connmgr/v3" 23 "github.com/decred/slog" 24 ) 25 26 var log = loggers.MainLog 27 28 // Initialize package-global logger variables. 29 func init() { 30 loader.UseLogger(loggers.LoaderLog) 31 wallet.UseLogger(loggers.WalletLog) 32 udb.UseLogger(loggers.WalletLog) 33 ticketbuyer.UseLogger(loggers.TkbyLog) 34 chain.UseLogger(loggers.SyncLog) 35 spv.UseLogger(loggers.SyncLog) 36 p2p.UseLogger(loggers.SyncLog) 37 rpcserver.UseLogger(loggers.GrpcLog) 38 jsonrpc.UseLogger(loggers.JsonrpcLog) 39 connmgr.UseLogger(loggers.CmgrLog) 40 vsp.UseLogger(loggers.VspcLog) 41 } 42 43 // subsystemLoggers maps each subsystem identifier to its associated logger. 44 var subsystemLoggers = map[string]slog.Logger{ 45 "DCRW": loggers.MainLog, 46 "LODR": loggers.LoaderLog, 47 "WLLT": loggers.WalletLog, 48 "TKBY": loggers.TkbyLog, 49 "SYNC": loggers.SyncLog, 50 "GRPC": loggers.GrpcLog, 51 "RPCS": loggers.JsonrpcLog, 52 "CMGR": loggers.CmgrLog, 53 "VSPC": loggers.VspcLog, 54 } 55 56 // setLogLevel sets the logging level for provided subsystem. Invalid 57 // subsystems are ignored. Uninitialized subsystems are dynamically created as 58 // needed. 59 func setLogLevel(subsystemID string, logLevel string) { 60 // Ignore invalid subsystems. 61 logger, ok := subsystemLoggers[subsystemID] 62 if !ok { 63 return 64 } 65 66 // Defaults to info if the log level is invalid. 67 level, _ := slog.LevelFromString(logLevel) 68 logger.SetLevel(level) 69 } 70 71 // setLogLevels sets the log level for all subsystem loggers to the passed 72 // level. It also dynamically creates the subsystem loggers as needed, so it 73 // can be used to initialize the logging system. 74 func setLogLevels(logLevel string) { 75 // Configure all sub-systems with the new logging level. Dynamically 76 // create loggers as needed. 77 for subsystemID := range subsystemLoggers { 78 setLogLevel(subsystemID, logLevel) 79 } 80 } 81 82 // fatalf logs a message, flushes the logger, and finally exit the process with 83 // a non-zero return code. 84 func fatalf(format string, args ...interface{}) { 85 log.Errorf(format, args...) 86 os.Stdout.Sync() 87 loggers.CloseLogRotator() 88 os.Exit(1) 89 }