From 7ae39e1869cb73296e3f5b1828d932e04a5ebd0e Mon Sep 17 00:00:00 2001 From: Manuel Kieweg <mail@manuelkieweg.de> Date: Tue, 6 Oct 2020 17:23:57 +0100 Subject: [PATCH] logging to syslog. main contains syslog example --- log/logger.go | 15 ++++++++++++--- main.go | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/log/logger.go b/log/logger.go index 4a7575112..adcaa5dc5 100644 --- a/log/logger.go +++ b/log/logger.go @@ -3,7 +3,9 @@ package log import ( "fmt" "io" + "log/syslog" "os" + "reflect" "runtime" "strconv" "strings" @@ -19,13 +21,16 @@ var once sync.Once type Logger struct { DefaultWriter io.Writer LoglevelWriter map[Level]io.Writer + toSyslog map[Level]bool Loglevel Level lock sync.Mutex builder strings.Builder } -func (l *Logger) buildMessage(level Level, args ...interface{}) { - l.builder.WriteString(time.Now().Format(time.RFC3339)) +func (l *Logger) buildMessage(level Level, syslog bool, args ...interface{}) { + if !syslog { + l.builder.WriteString(time.Now().Format(time.RFC3339)) + } l.builder.WriteRune('\t') l.builder.WriteString(prefix(level)) l.builder.WriteRune('\t') @@ -45,6 +50,7 @@ func get() *Logger { logger = &Logger{ DefaultWriter: os.Stderr, LoglevelWriter: make(map[Level]io.Writer), + toSyslog: make(map[Level]bool), Loglevel: INFO, lock: sync.Mutex{}, } @@ -77,6 +83,9 @@ func LoglevelOutput(level Level, out io.Writer) { l.lock.Lock() defer l.lock.Unlock() l.LoglevelWriter[level] = out + if reflect.TypeOf(out) == reflect.TypeOf(&syslog.Writer{}) { + l.toSyslog[level] = true + } } //Debug passes the DEBUG flag and a @@ -130,7 +139,7 @@ func log(level Level, args ...interface{}) { defer l.lock.Unlock() defer l.builder.Reset() if level <= l.Loglevel { - l.buildMessage(level, args...) + l.buildMessage(level, l.toSyslog[level], args...) msg := []byte(l.builder.String()) writer, ok := l.LoglevelWriter[level] var err error diff --git a/main.go b/main.go index 172f882ee..800252d80 100644 --- a/main.go +++ b/main.go @@ -18,7 +18,7 @@ func main() { cliSocket := *cliListenAddr + ":" + *cliListenPort log.Loglevel(log.DEBUG) - syslogWriter, err := syslog.New(syslog.LOG_INFO | syslog.LOG_ALERT, "gosdn") + syslogWriter, err := syslog.New(syslog.LOG_ALERT, "gosdn") defer func() { if err := syslogWriter.Close(); err != nil { log.Fatal(err) -- GitLab