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