Gol4ng/Logger is another GO logger. The main line is to provide a friendly and fast API to send your log whenever you want.
When i start GO i searched a logger that can be simple to use, efficient, multi output, multi formats and quite easy to extend. That's why i created this logger with built-in handlers(process a log), formatters(format log in another representation), middlewares(log modification before handler)
go get -u github.com/gol4ng/logger
package main
import (
"os"
"runtime"
"github.com/gol4ng/logger"
"github.com/gol4ng/logger/formatter"
"github.com/gol4ng/logger/handler"
)
func main(){
// logger will print on STDOUT with default line format
l := logger.NewLogger(handler.Stream(os.Stdout, formatter.NewDefaultFormatter(formatter.WithContext(true))))
l.Debug("Go debug information", logger.String("go_os", runtime.GOOS), logger.String("go_arch", runtime.GOARCH))
// <debug> MyExample message {"go_arch":"amd64","go_os":"darwin"}
l.Info("Another")
//<info> Another
}
This library expose some quite simple interfaces.
Simplest one
type LogInterface interface {
Log(message string, level Level, field ...Field)
}
The friendly one
type LoggerInterface interface {
LogInterface
Debug(message string, field ...Field)
Info(message string, field ...Field)
Notice(message string, field ...Field)
Warning(message string, field ...Field)
Error(message string, field ...Field)
Critical(message string, field ...Field)
Alert(message string, field ...Field)
Emergency(message string, field ...Field)
}
Handlers are log entry processor. It received a log entry and process it in order to send log to it's destination
Available handlers:
- stream it will write formatted log in io.Writer
- socket it will write formatted log in net.Conn
- chan send all entry in provided go channel
- gelf format to gelf and send to gelf server (TCP or UDP gzipped chunk)
- group it will send log to all provided child handlers
- rotate it will write formatted log in file and rotate file (mode: interval/archive)
- syslog send formatted log in syslog server
The formatter convert log entry to a string representation (text, json, gelf...) They are often inject in handler to do the conversion process
Available formatters:
- default
<info> My log message {"my_key":"my_value"}
- line it's just a
fmt.Sprintf
facade format:%s %s %s
will produceMy log message info <my_key:my_value>
- gelf format log entry to gelf
{"version":"1.1","host":"my_fake_hostname","level":6,"timestamp":513216000.000,"short_message":"My log message","full_message":"<info> My log message [ <my key:my_value> ]","_my_key":"my_value"}
- json format log entry to json
{"Message":"My log message","Level":6,"Context":{"my_key":"my_value"}}
The middleware are handler decorator/wrapper. It will allow you to do some process around child handler
Available middleware:
- caller it will add caller file/line to context
<file:/my/example/path/file> <line:31>
- context it permit to have a default context value useful when you want to set global context value
- error it will print provided handler error (can be configure to silent it)
- filter it will permit to filter log entry level filter are available or you can use your own callback filter
- placeholder it will replace log message placeholder with contextual value
- recover it will convert handler panic to error
- timestamp it will add timestamp to log context
Writers are use by handler to write/send log to appropriate destination
Available writer:
- compress it will compress log to gzip/zlib
- gelf_chunked it will chunked log entry into gelf chunk
- rotate it will write in io.Writer and rotate writer on demand
- time_rotate it's a rotate writer that rotate with
time.Ticker
-
benchmark
-
Implement all the handler
- SSE http endpoint
- websocket server
- socket server
- https://craig.is/writing/chrome-logger
- fingercross
- grpc / protobuf
- curl
- Slack
- hipchat
- amqp
- redis
- elasticsearch
- newrelic
- browser console
- couchdb
- cube
- ifttt
- InsightOps
- mandrill
- pushover
- raven
- rollbar
- sampling
- LogEntries
- ???
-
Implement all the formatter
- html
- proto
- slack
- flowdoc
- fluentd
- logstash
- mongodb
- wildfire
- log server with log routing