DAOT Labs' fork of ipfs/go-log.
go-log wraps zap to provide a logging facade. go-log manages logging instances and allows for their levels to be controlled individually.
CompactOutput
: a compact format which looks like:
D[2021-05-13T17:49:52.413+0800] example/log.go:52 for Debug
I[2021-05-13T17:49:52.413+0800] example/log.go:52 for Info
W[2021-05-13T17:49:52.413+0800] example/log.go:52 for Warn
E[2021-05-13T17:49:52.413+0800] example/log.go:52 for Error
p[2021-05-13T17:49:52.413+0800] example/log.go:52 for DPanic
P[2021-05-13T17:49:52.413+0800] example/log.go:52 for Panic
F[2021-05-13T17:49:52.413+0800] example/log.go:52 for Fatal
ColorizedCompactOutput
: same asCompactOutput
but colorized
AutoColor
: automatically switches between formats and their colorized counterparts (ColorizedOutput
<->PlaintextOutput
,ColorizedCompactOutput
<->CompactOutput
), if the current program is run from a terminal it switches to the colorized version, vice versaAutoStdout
: automatically enables stdout output if the current program is run from a terminal, or ((File is not set or not correct) and (URL is not set))Sampling
: configs log samplingLumberjack
: configs log rolling using Lumberjack
go get github.com/daotl/go-log/v2
Once the package is imported under the name logging
, an instance of EventLogger
can be created like so:
var log = logging.Logger("subsystem name")
It can then be used to emit log messages in plain printf-style messages at seven standard levels:
Levels may be set for all loggers:
lvl, err := logging.LevelFromString("error")
if err != nil {
panic(err)
}
logging.SetAllLoggers(lvl)
or individually:
err := logging.SetLogLevel("net:pubsub", "info")
if err != nil {
panic(err)
}
or by regular expression:
err := logging.SetLogLevelRegex("net:.*", "info")
if err != nil {
panic(err)
}
This package can be configured through various environment variables.
Specifies the log-level, both globally and on a per-subsystem basis.
For example, the following will set the global minimum log level to error
, but reduce the minimum
log level for subsystem1
to info
and reduce the minimum log level for subsystem2
to debug.
export GOLOG_LOG_LEVEL="error,subsystem1=info,subsystem2=debug"
Specifies that logs should be written to the specified file. If this option is not specified, logs are written to standard error.
export GOLOG_FILE="/path/to/my/file.log"
Specifies where logging output should be written. Can take one or more of the following values, combined with +
:
stdout
-- write logs to standard out.stderr
-- write logs to standard error.file
-- write logs to the file specified byGOLOG_FILE
For example, if you want to log to both a file and standard error:
export GOLOG_FILE="/path/to/my/file.log"
export GOLOG_OUTPUT="stderr+file"
Setting only GOLOG_FILE
will prevent logs from being written to standard error.
Specifies the log message format. It supports the following values:
color
-- human readable, colorized (ANSI) output.nocolor
-- human readable, plain-text output.json
-- structured JSON.compactcolor
-- human readable, compact colorized (ANSI) output.compactnocolor
-- human readable, compact output.
For example, to log structured JSON (for easier parsing):
export GOLOG_LOG_FMT="json"
The logging format defaults to color
when the output is a terminal, and nocolor
otherwise.
See AutoColor
in Added config options.
Specifies a set of labels that should be added to all log messages as comma-separated key-value
pairs. For example, the following add {"app": "example_app", "dc": "sjc-1"}
to every log entry.
export GOLOG_LOG_LABELS="app=example_app,dc=sjc-1"
Feel free to join in. All welcome. Open an issue!
MIT