Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add env for logging to file and syslog #46

Merged
merged 1 commit into from
Sep 12, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 35 additions & 2 deletions oldlog.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,13 @@ var defaultLogFormat = "color"

// Logging environment variables
const (
// TODO these env names should be more general, IPFS is not the only project to
// use go-log
envLogging = "IPFS_LOGGING"
envLoggingFmt = "IPFS_LOGGING_FMT"

envLoggingFile = "GOLOG_FILE" // /path/to/file
envLoggingSyslog = "GOLOG_SYSLOG_ENABLE" // 1 or 0
)

// ErrNoSuchLogger is returned when the util pkg is asked for a non existant logger
Expand All @@ -43,15 +48,43 @@ var loggerMutex sync.RWMutex
var loggers = map[string]*logging.Logger{}

// SetupLogging will initialize the logger backend and set the flags.
// TODO calling this in `init` pushes all configuration to env variables
// - move it out of `init`? then we need to change all the code (js-ipfs, go-ipfs) to call this explicitly
// - have it look for a config file? need to define what that is
func SetupLogging() {

// colorful or plain
lfmt := LogFormats[os.Getenv(envLoggingFmt)]
if lfmt == "" {
lfmt = LogFormats[defaultLogFormat]
}

backend := logging.NewLogBackend(colorable.NewColorableStderr(), "", 0)
logging.SetBackend(backend)
// check if we log to a file, or syslog, building a list of log backends
var lgbe []logging.Backend
if logfp := os.Getenv(envLoggingFile); len(logfp) > 0 {
f, err := os.Create(logfp)
if err != nil {
fmt.Fprintf(os.Stderr, "ERROR go-log: %s: failed to set logging file backend\n", err)
} else {
lgbe = append(lgbe, logging.NewLogBackend(f, "", 0))
}
}

// check if we want a syslogger
if env := os.Getenv(envLoggingSyslog); env == "1" {
slbe, err := logging.NewSyslogBackend("")
if err != nil {
fmt.Fprintf(os.Stderr, "ERROR go-log: %s: failed to set logging syslog backend", err)
} else {
lgbe = append(lgbe, slbe)
}
}

// logs written to stderr
lgbe = append(lgbe, logging.NewLogBackend(colorable.NewColorableStderr(), "", 0))

// set the backend(s)
logging.SetBackend(lgbe...)
logging.SetFormatter(logging.MustStringFormatter(lfmt))

lvl := logging.ERROR
Expand Down