Skip to content
Snippets Groups Projects
Commit 7ae39e18 authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

logging to syslog. main contains syslog example

parent 3bd39af9
No related branches found
No related tags found
2 merge requests!41Resolve "Enhanced Logging",!18Develop
Pipeline #52502 passed with warnings
...@@ -3,7 +3,9 @@ package log ...@@ -3,7 +3,9 @@ package log
import ( import (
"fmt" "fmt"
"io" "io"
"log/syslog"
"os" "os"
"reflect"
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
...@@ -19,13 +21,16 @@ var once sync.Once ...@@ -19,13 +21,16 @@ var once sync.Once
type Logger struct { type Logger struct {
DefaultWriter io.Writer DefaultWriter io.Writer
LoglevelWriter map[Level]io.Writer LoglevelWriter map[Level]io.Writer
toSyslog map[Level]bool
Loglevel Level Loglevel Level
lock sync.Mutex lock sync.Mutex
builder strings.Builder builder strings.Builder
} }
func (l *Logger) buildMessage(level Level, args ...interface{}) { func (l *Logger) buildMessage(level Level, syslog bool, args ...interface{}) {
l.builder.WriteString(time.Now().Format(time.RFC3339)) if !syslog {
l.builder.WriteString(time.Now().Format(time.RFC3339))
}
l.builder.WriteRune('\t') l.builder.WriteRune('\t')
l.builder.WriteString(prefix(level)) l.builder.WriteString(prefix(level))
l.builder.WriteRune('\t') l.builder.WriteRune('\t')
...@@ -45,6 +50,7 @@ func get() *Logger { ...@@ -45,6 +50,7 @@ func get() *Logger {
logger = &Logger{ logger = &Logger{
DefaultWriter: os.Stderr, DefaultWriter: os.Stderr,
LoglevelWriter: make(map[Level]io.Writer), LoglevelWriter: make(map[Level]io.Writer),
toSyslog: make(map[Level]bool),
Loglevel: INFO, Loglevel: INFO,
lock: sync.Mutex{}, lock: sync.Mutex{},
} }
...@@ -77,6 +83,9 @@ func LoglevelOutput(level Level, out io.Writer) { ...@@ -77,6 +83,9 @@ func LoglevelOutput(level Level, out io.Writer) {
l.lock.Lock() l.lock.Lock()
defer l.lock.Unlock() defer l.lock.Unlock()
l.LoglevelWriter[level] = out l.LoglevelWriter[level] = out
if reflect.TypeOf(out) == reflect.TypeOf(&syslog.Writer{}) {
l.toSyslog[level] = true
}
} }
//Debug passes the DEBUG flag and a //Debug passes the DEBUG flag and a
...@@ -130,7 +139,7 @@ func log(level Level, args ...interface{}) { ...@@ -130,7 +139,7 @@ func log(level Level, args ...interface{}) {
defer l.lock.Unlock() defer l.lock.Unlock()
defer l.builder.Reset() defer l.builder.Reset()
if level <= l.Loglevel { if level <= l.Loglevel {
l.buildMessage(level, args...) l.buildMessage(level, l.toSyslog[level], args...)
msg := []byte(l.builder.String()) msg := []byte(l.builder.String())
writer, ok := l.LoglevelWriter[level] writer, ok := l.LoglevelWriter[level]
var err error var err error
......
...@@ -18,7 +18,7 @@ func main() { ...@@ -18,7 +18,7 @@ func main() {
cliSocket := *cliListenAddr + ":" + *cliListenPort cliSocket := *cliListenAddr + ":" + *cliListenPort
log.Loglevel(log.DEBUG) 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() { defer func() {
if err := syslogWriter.Close(); err != nil { if err := syslogWriter.Close(); err != nil {
log.Fatal(err) log.Fatal(err)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment