From ec4a224613d5730ec5729281ff521757eb5a83de Mon Sep 17 00:00:00 2001 From: Taylor Perkins Date: Tue, 13 Dec 2016 11:36:24 -0800 Subject: [PATCH] Add Logentries handler. This handler will report to LogEntries with a [TCP token](https://github.com/bsphere/le_go#usage). --- Readme.md | 1 + _examples/logentries/logentries.go | 31 +++++++++++++++++++++++++ handlers/logentries/logentries.go | 37 ++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 _examples/logentries/logentries.go create mode 100644 handlers/logentries/logentries.go diff --git a/Readme.md b/Readme.md index 83d9e8d..a690f97 100644 --- a/Readme.md +++ b/Readme.md @@ -14,6 +14,7 @@ Package log implements a simple structured logging API inspired by Logrus, desig - __level__ – level filter handler - __logfmt__ – logfmt plain-text formatter - __memory__ – in-memory handler for tests +- __logentries__ – Logentries.com handler - __multi__ – fan-out to multiple handlers - __papertrail__ – Papertrail handler - __text__ – human-friendly colored output diff --git a/_examples/logentries/logentries.go b/_examples/logentries/logentries.go new file mode 100644 index 0000000..f78687d --- /dev/null +++ b/_examples/logentries/logentries.go @@ -0,0 +1,31 @@ +package main + +import ( + "os" + "time" + + "github.com/apex/log" + "github.com/apex/log/handlers/logentries" + "github.com/apex/log/handlers/multi" + "github.com/apex/log/handlers/text" +) + +func main() { + handler, _ := logentries.New("REPLACE_WITH_YOUR_TOKEN") + + log.SetHandler(multi.New( + text.New(os.Stderr), + handler, + )) + + ctx := log.WithFields(log.Fields{ + "file": "something.png", + "type": "image/png", + "user": "tobi", + }) + + for range time.Tick(time.Millisecond * 100) { + ctx.Info("upload") + ctx.Info("upload complete") + } +} diff --git a/handlers/logentries/logentries.go b/handlers/logentries/logentries.go new file mode 100644 index 0000000..35dedc5 --- /dev/null +++ b/handlers/logentries/logentries.go @@ -0,0 +1,37 @@ +// Package LogEntries implements a LogEntries JSON handler. +package logentries + +import ( + "encoding/json" + + "github.com/apex/log" + "github.com/bsphere/le_go" +) + +type ( + LogHandler struct { + logger *le_go.Logger + } +) + +func New(token string) (*LogHandler, error) { + logger, err := le_go.Connect(token) + + if err != nil { + return nil, err + } + + return &LogHandler{ + logger: logger, + }, nil +} + +func (handler *LogHandler) HandleLog(entry *log.Entry) error { + b, err := json.Marshal(entry) + if err != nil { + return err + } + + _, writer_error := handler.logger.Write(b) + return writer_error +}