Skip to content

Instantly share code, notes, and snippets.

@aybabtme
Created December 26, 2014 20:16
Show Gist options
  • Save aybabtme/50eabfb74e2a468c3f34 to your computer and use it in GitHub Desktop.
Save aybabtme/50eabfb74e2a468c3f34 to your computer and use it in GitHub Desktop.
syslog formatter middleware for Logrus
package log
import (
"fmt"
"log/syslog"
"os"
"github.com/Sirupsen/logrus"
)
var ceeTag = []byte("@cee:")
var _ logrus.Formatter = &syslogger{}
type syslogger struct {
wrap logrus.Formatter
out *syslog.Writer
}
func newSyslogger(appname string, fmter logrus.Formatter) (*syslogger, error) {
priority := syslog.LOG_LOCAL7
out, err := syslog.New(priority, appname)
return &syslogger{
out: out,
wrap: fmter,
}, err
}
func (s *syslogger) Format(e *logrus.Entry) ([]byte, error) {
data, err := s.wrap.Format(e)
if err != nil {
fmt.Fprintf(os.Stderr, "doge.log syslogger: can't format entry: %v\n", err)
return data, err
}
// only append tag to data sent to syslog (line), not to what
// is returned
line := string(append(ceeTag, data...))
switch e.Level {
case logrus.PanicLevel:
err = s.out.Crit(line)
case logrus.FatalLevel:
err = s.out.Crit(line)
case logrus.ErrorLevel:
err = s.out.Err(line)
case logrus.WarnLevel:
err = s.out.Warning(line)
case logrus.InfoLevel:
err = s.out.Info(line)
case logrus.DebugLevel:
err = s.out.Debug(line)
default:
err = s.out.Notice(line)
}
if err != nil {
fmt.Fprintf(os.Stderr, "doge.log syslogger: can't send log to syslog: %v\n", err)
}
return data, err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment