- 😻 Leveled logging
- 😚 Simple API
- 🤝
fmtfriendly - 👌 Zero dependencies
- 😮💨 No global logger
- 👏 No structured logging bullshit
go get github.com/heartwilltell/logThe StdLog implements a simple interface:
// Logger formats the message according to standard format specifiers from the fmt package
// and writes the message to writer specified by the concrete interface implementation.
type Logger interface {
// Error formats and writes the error level message.
Error(format string, v ...any)
// Warning formats and writes the warning level message.
Warning(format string, v ...any)
// Info formats and writes the information level message.
Info(format string, v ...any)
// Debug formats and writes the debug level message.
Debug(format string, v ...any)
}👇 The usage is pretty simple. Just create a logger instance and call any of leveled methods.
logger := log.New()
logger.Info("Listen on port: %d", 8080)👇 Sets the logging level to debug level.
logger := log.New(log.WithLevel(log.DBG))👇 Parses string to level and creates logger with warning level.
level, levelErr := log.ParseLevel("warning")
if levelErr != nil {
// handle error here
}
logger := log.New(log.WithLevel(level))👇 Creates logger with different io.Writer.
var w bytes.Buffer
logger := log.New(log.WithWriter(w))👇 Disables the colorful output.
logger := log.New(log.WithNoColor())👇 Sets the UTC time format.
logger := log.New(log.WithUTC())👇 Enables printing the code line number.
// Short format:
// INF: 2022/07/08 11:22:30 server.go:111: message
logger := log.New(log.WithLineNum(log.ShortFmt))OR
// Long format:
// INF: 2022/07/08 11:22:30 /Users/heartwilltell/Go/app/server.go:111: message
logger := log.New(log.WithLineNum(log.LongFmt))👇 Sets the level mark at the end of log prefix.
logger := log.New(log.WithLevelAtPrefixEnd())Will produce this 👇
// 2022/07/08 11:22:30 INF: message
Instead of this 👇
// INF: 2022/07/08 11:22:30: message
👇 Creates nop logger which implements log.Logger interface.
logger := log.NewNopLog()💡 Useful for tests or places where logger should be disabled by default