github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/util/log.go (about) 1 package util 2 3 import ( 4 "os" 5 6 "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/Sirupsen/logrus" 7 ) 8 9 func init() { 10 SetupLogging() 11 } 12 13 var log = logrus.New() 14 15 // LogFormats is a map of formats used for our logger, keyed by name. 16 // TODO: write custom TextFormatter (don't print module=name explicitly) and 17 // fork logrus to add shortfile 18 var LogFormats = map[string]*logrus.TextFormatter{ 19 "nocolor": {DisableColors: true, FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05.000000", DisableSorting: true}, 20 "color": {DisableColors: false, FullTimestamp: true, TimestampFormat: "15:04:05:000", DisableSorting: true}, 21 } 22 var defaultLogFormat = "color" 23 24 // Logging environment variables 25 const ( 26 envLogging = "IPFS_LOGGING" 27 envLoggingFmt = "IPFS_LOGGING_FMT" 28 ) 29 30 // loggers is the set of loggers in the system 31 var loggers = map[string]*logrus.Entry{} 32 33 // SetupLogging will initialize the logger backend and set the flags. 34 func SetupLogging() { 35 36 format, ok := LogFormats[os.Getenv(envLoggingFmt)] 37 if !ok { 38 format = LogFormats[defaultLogFormat] 39 } 40 41 log.Out = os.Stderr 42 log.Formatter = format 43 44 lvl := logrus.ErrorLevel 45 46 if logenv := os.Getenv(envLogging); logenv != "" { 47 var err error 48 lvl, err = logrus.ParseLevel(logenv) 49 if err != nil { 50 log.Debugf("logrus.ParseLevel() Error: %q", err) 51 lvl = logrus.ErrorLevel // reset to ERROR, could be undefined now(?) 52 } 53 } 54 55 if Debug := GetenvBool("IPFS_DEBUG"); Debug { 56 lvl = logrus.DebugLevel 57 } 58 59 SetAllLoggers(lvl) 60 } 61 62 // SetDebugLogging calls SetAllLoggers with logrus.DebugLevel 63 func SetDebugLogging() { 64 SetAllLoggers(logrus.DebugLevel) 65 } 66 67 // SetAllLoggers changes the logrus.Level of all loggers to lvl 68 func SetAllLoggers(lvl logrus.Level) { 69 log.Level = lvl 70 for _, logger := range loggers { 71 logger.Level = lvl 72 } 73 } 74 75 // Logger retrieves a particular logger 76 func Logger(name string) *logrus.Entry { 77 if len(name) == 0 { 78 log.Warnf("Missing name parameter") 79 name = "undefined" 80 } 81 if _, ok := loggers[name]; !ok { 82 loggers[name] = log.WithField("module", name) 83 } 84 return loggers[name] 85 } 86 87 // SetLogLevel changes the log level of a specific subsystem 88 // name=="*" changes all subsystems 89 func SetLogLevel(name, level string) error { 90 lvl, err := logrus.ParseLevel(level) 91 if err != nil { 92 return err 93 } 94 95 // wildcard, change all 96 if name == "*" { 97 SetAllLoggers(lvl) 98 return nil 99 } 100 101 // Check if we have a logger by that name 102 if _, ok := loggers[name]; !ok { 103 return ErrNoSuchLogger 104 } 105 106 loggers[name].Level = lvl 107 108 return nil 109 }