-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsyslog.go
64 lines (56 loc) · 1.29 KB
/
syslog.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main
import (
"log/syslog"
"errors"
"strconv"
"strings"
"sync"
"github.com/golang/glog"
)
var (
syslogWriter *syslog.Writer
syslogWriterOnce sync.Once
syslogErrMsg = "could not send message: syslog connection is nil"
)
// initialize the syslog connection
func getSyslogWriter() (*syslog.Writer, error) {
var err error
syslogWriterOnce.Do(func() {
info := globalServerOptions.exportSyslogInfo
connStr := info.address + ":" + strconv.Itoa(info.port)
syslogWriter, err = syslog.Dial(strings.ToLower(info.proto),
connStr, syslog.LOG_NOTICE, info.program)
if err == nil {
defer syslogWriter.Close()
}
})
return syslogWriter, err
}
// is syslog export enabled?
func isSyslogExportEnabled() (bool) {
return globalServerOptions.exportSyslogInfo != ExportSyslogInfo{}
}
// export message
func exportSyslog(jsonStr string) (error) {
var errCount uint
for {
w, err := getSyslogWriter()
if err != nil {
if errCount >= maxRetries {
return err
}
incErrorCountAndSleep(err, &errCount)
continue
}
if w == nil {
if errCount >= maxRetries {
return errors.New(syslogErrMsg)
}
incErrorCountAndSleep(errors.New(syslogErrMsg), &errCount)
continue
}
glog.V(1).Info(
"Sending JSON message to syslog server:", jsonStr)
return w.Notice(jsonStr)
}
}