- 😻 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