Home

Awesome

log - Simple leveled logging based on standard log package

<p align="center"> <img src="https://imagedelivery.net/r-FGMwXlTVvJHWFyznDr1Q/b6462eaf-74a1-4225-8548-45c4c8ea0100/public" width="800" title="hover text" alt="logo"> </p>

Documentation

Build codecov

Benefits

Installation

go get github.com/heartwilltell/log

Leveled logging

The 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)
}

Usage

👇 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

License

MIT License.