A high-performance, configurable logging library for Go applications.
- Multiple log levels (Debug, Info, Warn, Error, Fatal, Panic)
- Flexible output formatting (Plain text, JSON, LogFmt)
- Customizable log fields
- Color support for console output
- Log file rotation
- Zero allocation logging
- Context support
- Thread-safe
go get github.com/yc-alpha/loggerpackage main
import "github.com/yc-alpha/logger"
func main() {
// Use default logger
logger.Info("hello world")
// Create custom logger
log := logger.NewLogger(
// Won't output logs below Info level
logger.WithLevel(logger.InfoLevel),
// Set the output to stdout for all log levels
logger.WithBackends(logger.AnyLevel, backend.OSBackend().Build()),
logger.WithFields(logger.AnyLevel,
logger.DatetimeField(time.DateTime),
logger.LevelField().Key("level").Upper(),
logger.MessageField(),
),
// Set the encoder to LogFmtEncoder for all log levels
logger.WithEncoders(logger.AnyLevel, logger.LogFmtEncoder),
)
log.Info("hello logger!")
}DebugLevelInfoLevel(default)WarnLevelErrorLevelFatalLevelPanicLevel
- Console output (
OSBackend) - File output with rotation (
DefaultFileBackend)
Built-in fields:
LevelField- Log levelMessageField- Log messageDatetimeField- Formated timeTimeField- TimestampCallerField- File and line numberFuncNameField- Function nameCustomField- User-defined field
Supported encoders:
PlainEncoder- Simple text formatJSONEncoder- JSON formatLogFmtEncoder- LogFmt format
log.Infos("hello",
logger.Group("metadata",
logger.String("user", "admin"),
logger.Int("id", 123),
),
)log := logger.NewLogger(
logger.WithFields(logger.ErrorLevel,
logger.LevelField().Color(logger.Red),
logger.MessageField().Color(logger.Yellow),
),
)- Add a group field "sys_info" to info and warn level logs
- Add
fileandfuncfields to warn level logs and above
log := NewLogger(
WithLevel(InfoLevel),
WithBackends(AnyLevel, backend.OSBackend().Build()),
WithFields(AnyLevel,
DatetimeField(time.DateTime).Key("datetime"),
LevelField().Key("level").Upper().Prefix("[").Suffix("]"),
MessageField().Key("msg"),
),
WithFields(InfoLevel|WarnLevel,
Group("sys_info",
CustomField(func(buf *buffer.Buffer) {
buildInfo, _ := debug.ReadBuildInfo()
buf.WriteString(buildInfo.GoVersion)
}).Key("go_version"),
Group("sys", CustomField(func(buf *buffer.Buffer) {
buf.WriteInt(int64(os.Getpid()))
}).Key("pid")),
)),
WithFields(ErrorLevel|FatalLevel|PanicLevel,
CallerField(true, false).Key("file"),
FuncNameField(true).Key("func"),
),
WithEncoders(AnyLevel, LogFmtEncoder),
)
log.Debug("hello debug")
log.Info("hello info")
log.Warn("hello warn")
log.Error("hello error")log := logger.NewLogger(
logger.WithBackends(logger.InfoLevel,
backend.DefaultFileBackend().
Filename("app.log").
MaxSize(100). // MB
MaxBackups(5).
Compress(true).
Build(),
),
)View test case Here
BenchmarkInfo-12 24850 58835 ns/op 0 B/op 0 allocs/op
BenchmarkInfos-12 27985 51170 ns/op 0 B/op 0 allocs/op
BenchmarkDefaultLogger-12 26377 54866 ns/op 232 B/op 2 allocs/op
- zap:Refer to the implementation of buffer
- lumberjack:Refer to lumberjack for file rotation implementation
MIT License - see LICENSE for details