diff --git a/log/logger.go b/log/logger.go index 4a75751123037fb7a163de63f4073f595f9fe1bf..adcaa5dc590a7b46e9a4d0906afbd242e904a6ca 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 172f882ee142ef91812cbbfc77ceb31367f9bb59..800252d804efd745aac2b87bd45ee5ce3df6ec66 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)