mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 02:47:48 +08:00
110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package util
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/Sirupsen/logrus"
|
|
)
|
|
|
|
func init() {
|
|
SetupLogging()
|
|
}
|
|
|
|
var log = logrus.New()
|
|
|
|
// LogFormats is a map of formats used for our logger, keyed by name.
|
|
// TODO: write custom TextFormatter (don't print module=name explicitly) and
|
|
// fork logrus to add shortfile
|
|
var LogFormats = map[string]*logrus.TextFormatter{
|
|
"nocolor": &logrus.TextFormatter{DisableColors: true, FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05.000000", DisableSorting: true},
|
|
"color": &logrus.TextFormatter{DisableColors: false, FullTimestamp: true, TimestampFormat: "15:04:05:000", DisableSorting: true},
|
|
}
|
|
var defaultLogFormat = "color"
|
|
|
|
// Logging environment variables
|
|
const (
|
|
envLogging = "IPFS_LOGGING"
|
|
envLoggingFmt = "IPFS_LOGGING_FMT"
|
|
)
|
|
|
|
// loggers is the set of loggers in the system
|
|
var loggers = map[string]*logrus.Entry{}
|
|
|
|
// SetupLogging will initialize the logger backend and set the flags.
|
|
func SetupLogging() {
|
|
|
|
format, ok := LogFormats[os.Getenv(envLoggingFmt)]
|
|
if !ok {
|
|
format = LogFormats[defaultLogFormat]
|
|
}
|
|
|
|
log.Out = os.Stderr
|
|
log.Formatter = format
|
|
|
|
lvl := logrus.ErrorLevel
|
|
|
|
if logenv := os.Getenv(envLogging); logenv != "" {
|
|
var err error
|
|
lvl, err = logrus.ParseLevel(logenv)
|
|
if err != nil {
|
|
log.Debugf("logrus.ParseLevel() Error: %q", err)
|
|
lvl = logrus.ErrorLevel // reset to ERROR, could be undefined now(?)
|
|
}
|
|
}
|
|
|
|
if Debug := GetenvBool("IPFS_DEBUG"); Debug {
|
|
lvl = logrus.DebugLevel
|
|
}
|
|
|
|
SetAllLoggers(lvl)
|
|
}
|
|
|
|
// SetDebugLogging calls SetAllLoggers with logrus.DebugLevel
|
|
func SetDebugLogging() {
|
|
SetAllLoggers(logrus.DebugLevel)
|
|
}
|
|
|
|
// SetAllLoggers changes the logrus.Level of all loggers to lvl
|
|
func SetAllLoggers(lvl logrus.Level) {
|
|
log.Level = lvl
|
|
for _, logger := range loggers {
|
|
logger.Level = lvl
|
|
}
|
|
}
|
|
|
|
// Logger retrieves a particular logger
|
|
func Logger(name string) *logrus.Entry {
|
|
if len(name) == 0 {
|
|
log.Warnf("Missing name parameter")
|
|
name = "undefined"
|
|
}
|
|
if _, ok := loggers[name]; !ok {
|
|
loggers[name] = log.WithField("module", name)
|
|
}
|
|
return loggers[name]
|
|
}
|
|
|
|
// SetLogLevel changes the log level of a specific subsystem
|
|
// name=="*" changes all subsystems
|
|
func SetLogLevel(name, level string) error {
|
|
lvl, err := logrus.ParseLevel(level)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// wildcard, change all
|
|
if name == "*" {
|
|
SetAllLoggers(lvl)
|
|
return nil
|
|
}
|
|
|
|
// Check if we have a logger by that name
|
|
if _, ok := loggers[name]; !ok {
|
|
return ErrNoSuchLogger
|
|
}
|
|
|
|
loggers[name].Level = lvl
|
|
|
|
return nil
|
|
}
|