Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork44
A high-performant Logging Foundation for Go Applications. X3 faster than the rest leveled loggers.
License
kataras/golog
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
golog is a zero-dependency simple, fast and easy-to-use level-based logger written inGo Programming Language.
The only requirement is the Go Programming Language*.
Go modules
$ go get github.com/kataras/golog@latest
Or edit your project's go.mod file and execute $ go build.
module your_project_namego1.22require (github.com/kataras/golog v0.1.12)
$ go build
$ go get github.com/kataras/golog@latest
package mainimport ("github.com/kataras/golog")funcmain() {// Default Output is `os.Stdout`,// but you can change it:// golog.SetOutput(os.Stderr)// Time Format defaults to: "2006/01/02 15:04"// you can change it to something else or disable it with:// golog.SetTimeFormat("")// Level defaults to "info",// but you can change it:golog.SetLevel("debug")golog.Println("This is a raw message, no levels, no colors.")golog.Info("This is an info message, with colors (if the output is terminal)")golog.Warn("This is a warning message")golog.Error("This is an error message")golog.Debug("This is a debug message")golog.Fatal(`Fatal will exit no matter what, but it will also print the log message if logger's Level is >=FatalLevel`)// Use any other supported logger through golog, e.g. the new "log/slog":// golog.Install(slog.Default())}
Name | Method | Text | Color |
---|---|---|---|
"fatal" | Fatal, Fatalf | [FTAL] | Red background |
"error" | Error, Errorf | [ERRO] | Red foreground |
"warn" | Warn, Warnf, Warningf | [WARN] | Magenta foreground |
"info" | Info, Infof | [INFO] | Cyan foreground |
"debug" | Debug, Debugf | [DBUG] | Yellow foreground |
On debug level the logger will store stacktrace information to the log instance, which is not printed but can be accessed through a
Handler
(see below).
// GetTextForLevel returns the level's (rich) text.fatalRichText:=golog.GetTextForLevel(golog.FatalLevel,true)// fatalRichText == "\x1b[41m[FTAL]\x1b[0m"
// ParseLevel returns a Level based on its string name.level:=golog.ParseLevel("debug")// level == golog.DebugLevel
You can customize the log level attributes.
funcinit() {// Levels contains a map of the log levels and their attributes.errorAttrs:=golog.Levels[golog.ErrorLevel]// Change a log level's text.customColorCode:=156errorAttrs.SetText("custom text",customColorCode)// Get (rich) text per log level.enableColors:=trueerrorRichText:=errorAttrs.Text(enableColors)}
Alternatively, to change a specific text on a known log level, you can just call:
golog.ErrorText("custom text",156)
Thegolog.Logger
is using common, expected log methods, therefore you can integrate it with ease.
Take for example thebadger database. You want to add a prefix of[badger]
in your logs when badger wants to print something.
- Create a child logger with a prefix text using the
Child
function, - disable new lines (because they are managed by badger itself) and you are ready to GO:
opts:=badger.DefaultOptions("./data")opts.Logger=golog.Child("[badger]").DisableNewLine()db,err:=badger.Open(opts)// [...]
You can putgolog
in front of your existing loggers using theInstall method.
Supporte loggers:
- log
- slog
- logrus
Example forlog/slog
standard package:
// Simulate an slog.Logger preparation.varmyLogger=slog.New(slog.NewJSONHandler(os.Stdout,&slog.HandlerOptions{Level:slog.LevelDebug,}))funcmain() {golog.SetLevel("error")golog.Install(myLogger)golog.Error("error message")}
Example forlog
standard package:
// Simulate a log.Logger preparation.myLogger:=log.New(os.Stdout,"",0)golog.SetLevel("error")golog.Install(myLogger)golog.Error("error message")
Example forsirupsen/logrus:
// Simulate a logrus logger preparation.logrus.SetLevel(logrus.InfoLevel)logrus.SetFormatter(&logrus.JSONFormatter{})golog.Install(logrus.StandardLogger())golog.Debug(`this debug message will not be shown, because the logrus level is InfoLevel`)golog.Error(`this error message will be visible as JSON, because of logrus.JSONFormatter`)
Any value that completes theFormatter interface can be used to write to the (leveled) output writer. By default the"json"
formatter is available.
import"github.com/kataras/golog"funcmain() {golog.SetLevel("debug")golog.SetFormat("json"," ")// < --// main.go#29golog.Debugf("This is a %s with data (debug prints the stacktrace too)","message", golog.Fields{"username":"kataras", })}
Output
{"timestamp":1591423477,"level":"debug","message":"This is a message with data (debug prints the stacktrace too)","fields": {"username":"kataras" },"stacktrace": [ {"function":"main.main","source":"C:/example/main.go:29" } ]}
golog.RegisterFormatter(new(myFormatter))golog.SetFormat("myformat",options...)
TheFormatter
interface looks like this:
// Formatter is responsible to print a log to the logger's writer.typeFormatterinterface {// The name of the formatter.String()string// Set any options and return a clone,// generic. See `Logger.SetFormat`.Options(opts...any)Formatter// Writes the "log" to "dest" logger.Format(dest io.Writer,log*Log)bool}
The Logger can accept functions to handle (and print) eachLog through itsHandle method. The Handle method accepts aHandler.
typeHandlerfunc(value*Log) (handledbool)
This method can be used to alter Log's fields based on custom logic or to change the output destination and itsoutput format.
Create a JSON handler
import"encoding/json"funcjsonOutput(l*golog.Log)bool {enc:=json.NewEncoder(l.Logger.GetLevelOutput(l.Level.String()))enc.SetIndent(""," ")err:=enc.Encode(l)returnerr==nil}
Register the handler and log something
import"github.com/kataras/golog"funcmain() {golog.SetLevel("debug")golog.Handle(jsonOutput)// main.go#29golog.Debugf("This is a %s with data (debug prints the stacktrace too)","message", golog.Fields{"username":"kataras", })}
- basic
- output per level
- child
- add new level
- change text and color
- customize output
- multi output
- scan
- logurs integration
- log.Logger std integration
- ngrok integrationNEW
- postgres integrationNEW
- new instance
test | times ran (large is better) | ns/op (small is better) | B/op (small is better) | allocs/op (small is better) |
---|---|---|---|---|
BenchmarkGologPrint | 10000000 | 3749 ns/op | 890 B/op | 28 allocs/op |
BenchmarkLogrusPrint | 3000000 | 9609 ns/op | 1611 B/op | 64 allocs/op |
Clickhere for details.
If you find that something is not working as expected please open anissue.
About
A high-performant Logging Foundation for Go Applications. X3 faster than the rest leveled loggers.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors6
Uh oh!
There was an error while loading.Please reload this page.