Skip to content

Simple leveled logging wrapper around standard log package

License

Notifications You must be signed in to change notification settings

heartwilltell/log

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

log - Simple leveled logging based on standard log package

logo

Documentation

Build codecov

Benefits

  • 😻 Leveled logging
  • 😚 Simple API
  • 🤝 fmt friendly
  • 👌 Zero dependencies
  • 😮‍💨 No global logger
  • 👏 No structured logging bullshit

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.