Popularity
1.2
Growing
Activity
0.0
Stable
13
1
0
Programming language: Go
License: MIT License
Tags:
Logging
Latest version: v0.1.0
glo alternatives and similar packages
Based on the "Logging" category.
Alternatively, view glo alternatives based on common mentions on social networks and blogs.
-
loggo
A logging library for Go. Doesn't use the built in go log standard library, but instead offers a replacement. -
rollingwriter
RollingWriter is an auto-rotate io.Writer implementation with multi policies to provide log file rotation. -
httpretty
Pretty-prints your regular HTTP requests on your terminal for debugging (similar to http.DumpRequest). -
ozzo-log
High performance logging supporting log severity, categorization, and filtering. Can send filtered log messages to various targets (e.g. console, network, mail). -
logur
An opinionated logger interface and collection of logging best practices with adapters and integrations for well-known libraries (logrus, go-kit log, zap, zerolog, etc). -
gologger
Simple easy to use log lib for go, logs in Colored Cosole, Simple Console, File or Elasticsearch. -
stdlog
Stdlog is an object-oriented library providing leveled logging. It is very useful for cron jobs. -
mlog
A simple logging module for go, with 5 levels, an optional rotating logfile feature and stdout/stderr output. -
go-cronowriter
A simple writer that rotate log files automatically based on current date and time, like cronolog. -
gomol
Gomol is a library for structured, multiple-output logging for Go with extensible logging outputs
Get performance insights in less than 4 minutes
Scout APM uses tracing logic that ties bottlenecks to source code so you know the exact line of code causing performance issues and can get back to building a great product faster.
Sponsored
scoutapm.com
Do you think we are missing an alternative of glo or a related project?
Popular Comparisons
README
GLO
Logging library for Golang
Inspired by Monolog for PHP, severity levels are identical
Install
go get github.com/lajosbencz/glo
Severity levels
Debug = 100
Info = 200
Notice = 250
Warning = 300
Error = 400
Critical = 500
Alert = 550
Emergency = 600
Simple example
package main
import "github.com/lajosbencz/glo"
func main() {
// Info - Warning will go to os.Stdout
// Error - Emergency will go to os.Stderr
log := glo.NewStdFacility()
// goes to os.Stdout
log.Debug("Detailed debug line: %#v", map[string]string{"x": "foo", "y": "bar"})
// goes to os.Stderr
log.Error("Oooof!")
}
Output:
2019-01-22T15:16:08+01:00 [DEBUG] Detailed debug line [map[x:foo y:bar]]
2019-01-22T15:16:08+01:00 [ERROR] Oooof! []
Customized example
package main
import (
"bytes"
"fmt"
"os"
"strings"
"github.com/lajosbencz/glo"
)
func main() {
log := glo.NewFacility()
// write everything to a buffer
bfr := bytes.NewBufferString("")
handlerBfr := glo.NewHandler(bfr)
log.PushHandler(handlerBfr)
// write only errors and above using a short format
handlerStd := glo.NewHandler(os.Stdout)
formatter := glo.NewFormatter("{L}: {M}")
filter := glo.NewFilterLevel(glo.Error)
handlerStd.SetFormatter(formatter)
handlerStd.PushFilter(filter)
log.PushHandler(handlerStd)
fmt.Println("Log output:")
fmt.Println(strings.Repeat("=", 70))
log.Info("Only written to the buffer")
log.Alert("Written to both buffer and stdout")
fmt.Println("")
fmt.Println("Buffer contents:")
fmt.Println(strings.Repeat("=", 70))
fmt.Println(bfr.String())
}
Output:
Log output:
======================================================================
ALERT: Written to both buffer and stdout []
Buffer contents:
======================================================================
2019-01-22T15:14:16+01:00 [INFO] Only written to the buffer []
2019-01-22T15:14:16+01:00 [ALERT] Written to both buffer and stdout []
Custom filter
package main
import (
"os"
"regexp"
"github.com/lajosbencz/glo"
)
func main() {
handler := glo.NewHandler(os.Stdout)
filterEmptyLines := &filterRgx{regexp.MustCompile(`^.+$`)}
handler.PushFilter(filterEmptyLines)
log := glo.NewFacility()
log.PushHandler(handler)
log.Debug("", "format is empty, should be ignored")
log.Debug("only this should appear at the output")
}
type filterRgx struct {
rgx *regexp.Regexp
}
func (f *filterRgx) Check(level glo.Level, line string, params ...interface{}) bool {
return f.rgx.MatchString(line)
}
Output:
2019-01-22T15:30:23+01:00 [DEBUG] only this should appear at the output