Simple, customizable, leveled, zero allocation logging in Go
go get -u github.com/ermanimer/logger
log is a simple logging package for Go.
- You can set time format and prefixes.
- You can set logging level to filter out log messages.
- You can set a hook function to be called after each log.
log isn't the fastest logging solution for Go, but log is efficient while being custimizable. Please see benchmark test results.
...
- Debug
- Info
- Warning
- Error
- Fatal
Parameter | Value |
---|---|
Time Format | RFC3339 |
Debug Prefix | debug |
Info Prefix | info |
Warning Prefix | warning |
Error Prefix | error |
Fatal Prefix | fatal |
Logging Level | Debug |
l.SetTimeFormat(time.RFC3339Nano)
l.SetDebugPrefix("DEB")
l.SetDebugPrefix("INF")
l.SetDebugPrefix("WAR")
l.SetDebugPrefix("ERR")
l.SetDebugPrefix("FAT")
l.SetLoggingLevel(InfoLevel)
l.SetHookFunction(func(prefix, message string) {
//filter messages with prefix and capture for Sentry.io
//...
})
Test Code:
func BenchmarkDebug(b *testing.B) {
// create logger
l := NewLogger(ioutil.Discard)
// start benchmark test
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
l.Debug("test")
}
})
}
func BenchmarkDebugf(b *testing.B) {
// create logger
l := NewLogger(ioutil.Discard)
// start benchmark test
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
l.Debugf("%s", "test")
}
})
}
Results:
Function | Time | Bytes Allocated | Objects Allocated |
---|---|---|---|
Debug | 410.7 ns/op | 4 B/op | 1 allocs/op |
Debugf | 408.7 ns/op | 4 B/op | 1 allocs/op |
Info | 404.0 ns/op | 4 B/op | 1 allocs/op |
Infof | 403.9 ns/op | 4 B/op | 1 allocs/op |
Warning | 407.0 ns/op | 4 B/op | 1 allocs/op |
Warningf | 409.4 ns/op | 4 B/op | 1 allocs/op |
Error | 404.6 ns/op | 4 B/op | 1 allocs/op |
Errorf | 406.2 ns/op | 4 B/op | 1 allocs/op |
Fatal | 402.1 ns/op | 4 B/op | 1 allocs/op |
Fatalf | 406.0 ns/op | 4 B/op | 1 allocs/op |