slog
is a lightweight, configurable, extensible Go logging library.
Features
- Simple, directly available without configuration
- Support common log level processing.
- eg:
trace
debug
info
notice
warn
error
fatal
panic
- eg:
- Support any extension of
Handler
Formatter
as needed - Supports adding multiple
Handler
log processing at the same time, outputting logs to different places - Support to custom log message
Formatter
- Built-in
json
text
two log record formattingFormatter
- Built-in
- Support to custom build log messages
Handler
- The built-in
handler.Config
handler.Builder
can easily and quickly build the desired log handler
- The built-in
- Has built-in common log write handler program
-
console
output logs to the console, supports color output -
writer
output logs to the specifiedio.Writer
-
file
output log to the specified file, optionally enablebuffer
to buffer writes -
simple
output log to the specified file, write directly to the file without buffering -
rotate_file
outputs logs to the specified file, and supports splitting files by time and size, andbuffer
buffered writing is enabled by default - See ./handler folder for more built-in implementations
-
Output logs to file
- Support enabling
buffer
for log writing - Support splitting log files by
time
andsize
- Support configuration to compress log files via
gzip
- Support clean old log files by
BackupNum
BackupTime
Git repository
- Github: https://github.com/gookit/slog
Install
go get github.com/gookit/slog
Quick start
package main
import (
"github.com/gookit/slog"
)
func main() {
slog.Trace("this is a log message")
slog.Debug("this is a log message")
slog.Info("this is a log message")
slog.Notice("this is a log message")
slog.Warn("this is a log message")
slog.Error("this is a log message")
slog.Fatal("this is a log message")
}
output preview:
Logs to file
Using slog
to output logs to files is very convenient, and supports multiple files, splitting by time, etc.
package main
import (
"github.com/gookit/slog"
"github.com/gookit/slog/handler"
"github.com/gookit/slog/rotatefile"
)
func main() {
defer slog.MustFlush()
// DangerLevels contains: slog.PanicLevel, slog.ErrorLevel, slog.WarnLevel
h1 := handler.MustRotateFile("/tmp/logs/app_error.log", rotatefile.EveryHour,
handler.WithLogLevels(slog.DangerLevels),
)
// NormalLevels contains: slog.InfoLevel, slog.NoticeLevel, slog.DebugLevel, slog.TraceLevel
h2 := handler.MustRotateFile("/tmp/logs/app_info.log", rotatefile.EveryHour,
handler.WithLogLevels(slog.NormalLevels),
)
slog.PushHandler(h1)
slog.PushHandler(h2)
// add logs
slog.Info("info message text")
slog.Error("error message text")
}
See logs dir:
$ ls /tmp/logs
app_error.log
app_info.log
More usage
More usage please see README
Top comments (1)
Go 1.21 is going to bring a new structured logging library called "slog".
I will be pretty similar to gookit/slog but without formatter and provided handlers will only be able to write to stdout or stdin.
The library has been built to be extended very easily with customer slog.Handler.