2016-10-01 05:37:56 +08:00
|
|
|
package logger
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"io"
|
|
|
|
|
"log"
|
|
|
|
|
|
2022-10-13 04:23:53 +08:00
|
|
|
"github.com/influxdata/wlog"
|
2019-08-29 05:34:44 +08:00
|
|
|
)
|
2016-10-01 05:37:56 +08:00
|
|
|
|
2019-08-29 05:34:44 +08:00
|
|
|
// Keep track what is actually set as a log output, because log package doesn't provide a getter.
|
|
|
|
|
// It allows closing previous writer if re-set and have possibility to test what is actually set
|
2024-05-11 05:43:43 +08:00
|
|
|
var actualLogger io.WriteCloser
|
2019-08-29 05:34:44 +08:00
|
|
|
|
2024-05-11 05:43:43 +08:00
|
|
|
// SetupLogging configures the logging output.
|
|
|
|
|
func SetupLogging(cfg Config) error {
|
2016-10-11 20:06:17 +08:00
|
|
|
log.SetFlags(0)
|
2022-02-22 23:11:30 +08:00
|
|
|
if cfg.Debug {
|
2016-10-01 05:37:56 +08:00
|
|
|
wlog.SetLevel(wlog.DEBUG)
|
|
|
|
|
}
|
2022-02-22 23:11:30 +08:00
|
|
|
if cfg.Quiet {
|
2016-10-01 05:37:56 +08:00
|
|
|
wlog.SetLevel(wlog.ERROR)
|
|
|
|
|
}
|
2022-02-22 23:11:30 +08:00
|
|
|
if !cfg.Debug && !cfg.Quiet {
|
2019-08-29 05:34:44 +08:00
|
|
|
wlog.SetLevel(wlog.INFO)
|
|
|
|
|
}
|
2024-05-11 05:43:43 +08:00
|
|
|
|
|
|
|
|
if cfg.LogTarget == "" {
|
2024-06-17 16:20:02 +08:00
|
|
|
cfg.LogTarget = LogTargetStderr
|
2019-08-29 05:34:44 +08:00
|
|
|
}
|
2024-05-11 05:43:43 +08:00
|
|
|
|
|
|
|
|
// Get the logging factory
|
|
|
|
|
logCreator, ok := loggerRegistry[cfg.LogTarget]
|
|
|
|
|
if !ok {
|
|
|
|
|
log.Printf("E! Unsupported logtarget: %s, using stderr", cfg.LogTarget)
|
|
|
|
|
logCreator = createStderrLogger
|
2019-08-29 05:34:44 +08:00
|
|
|
}
|
2016-10-01 05:37:56 +08:00
|
|
|
|
2024-05-11 05:43:43 +08:00
|
|
|
// Create the root logging instance
|
|
|
|
|
logWriter, err := logCreator(cfg)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Close the previous logger if possible
|
|
|
|
|
if err := CloseLogging(); err != nil {
|
|
|
|
|
return err
|
2016-10-01 05:37:56 +08:00
|
|
|
}
|
2022-10-13 04:23:53 +08:00
|
|
|
|
2024-05-11 05:43:43 +08:00
|
|
|
// Use the new logger and store a reference
|
2019-08-29 05:34:44 +08:00
|
|
|
log.SetOutput(logWriter)
|
|
|
|
|
actualLogger = logWriter
|
|
|
|
|
|
2024-05-11 05:43:43 +08:00
|
|
|
return nil
|
2019-08-29 05:34:44 +08:00
|
|
|
}
|
2016-10-01 05:37:56 +08:00
|
|
|
|
2024-05-11 05:43:43 +08:00
|
|
|
func CloseLogging() error {
|
|
|
|
|
if actualLogger == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return actualLogger.Close()
|
2016-10-01 05:37:56 +08:00
|
|
|
}
|