This dependency added a method to access the current standard logger. This is required to properly configure the logger for context awareness. The plan is to have all loggers descend from the standard logger. Signed-off-by: Stephen J Day <stephen.day@docker.com>
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package logrus_papertrail
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
)
|
|
|
|
const (
|
|
format = "Jan 2 15:04:05"
|
|
)
|
|
|
|
// PapertrailHook to send logs to a logging service compatible with the Papertrail API.
|
|
type PapertrailHook struct {
|
|
Host string
|
|
Port int
|
|
AppName string
|
|
UDPConn net.Conn
|
|
}
|
|
|
|
// NewPapertrailHook creates a hook to be added to an instance of logger.
|
|
func NewPapertrailHook(host string, port int, appName string) (*PapertrailHook, error) {
|
|
conn, err := net.Dial("udp", fmt.Sprintf("%s:%d", host, port))
|
|
return &PapertrailHook{host, port, appName, conn}, err
|
|
}
|
|
|
|
// Fire is called when a log event is fired.
|
|
func (hook *PapertrailHook) Fire(entry *logrus.Entry) error {
|
|
date := time.Now().Format(format)
|
|
msg, _ := entry.String()
|
|
payload := fmt.Sprintf("<22> %s %s: %s", date, hook.AppName, msg)
|
|
|
|
bytesWritten, err := hook.UDPConn.Write([]byte(payload))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Unable to send log line to Papertrail via UDP. Wrote %d bytes before error: %v", bytesWritten, err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Levels returns the available logging levels.
|
|
func (hook *PapertrailHook) Levels() []logrus.Level {
|
|
return []logrus.Level{
|
|
logrus.PanicLevel,
|
|
logrus.FatalLevel,
|
|
logrus.ErrorLevel,
|
|
logrus.WarnLevel,
|
|
logrus.InfoLevel,
|
|
logrus.DebugLevel,
|
|
}
|
|
}
|