-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsyslog.go
123 lines (111 loc) · 2.04 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package main
import (
"bytes"
"text/template"
"time"
)
type SyslogSeverity uint8
type SyslogFacility uint8
type SyslogPriority uint8
type syslogMessage struct {
Facility SyslogFacility
Severity SyslogSeverity
Message string
Syslogtag string
Hostname string
timestamp time.Time
}
const maxMsgLen = 2048
// From /usr/include/sys/syslog.h.
const (
logEmerg SyslogSeverity = iota
logAlert
logCrit
logErr
logWarning
logNotice
logInfo
logDebug
)
var severityMap = map[SyslogSeverity]string{
logEmerg: "EMERG",
logAlert: "ALERT",
logCrit: "CRIT",
logErr: "ERR",
logWarning: "WARNING",
logNotice: "NOTICE",
logInfo: "INFO",
logDebug: "DEBUG",
}
// From /usr/include/sys/syslog.h.
const (
logKern SyslogFacility = iota
logUser
logMail
logDaemon
logAuth
logSyslog
logLpr
logNews
logUucp
logClock
logAuthpriv
logFtp
logNtp
logLogaudit
logLogalert
logCron
logLocal0
logLocal1
logLocal2
logLocal3
logLocal4
logLocal5
logLocal6
logLocal7
)
var facilityMap = map[SyslogFacility]string{
logKern: "KERN",
logUser: "USER",
logMail: "MAIL",
logDaemon: "DAEMON",
logAuth: "AUTH",
logSyslog: "SYSLOG",
logLpr: "LPR",
logNews: "NEWS",
logUucp: "UUCP",
logClock: "CLOCK",
logAuthpriv: "AUTHPRIV",
logFtp: "FTP",
logNtp: "NTP",
logLogaudit: "LOGAUDIT",
logLogalert: "LOGALERT",
logCron: "CRON",
logLocal0: "LOCAL0",
logLocal1: "LOCAL1",
logLocal2: "LOCAL2",
logLocal3: "LOCAL3",
logLocal4: "LOCAL4",
logLocal5: "LOCAL5",
logLocal6: "LOCAL6",
logLocal7: "LOCAL7",
}
func (s SyslogSeverity) String() string {
if val, ok := severityMap[s]; ok {
return val
}
return "UNKNOWN"
}
func (f SyslogFacility) String() string {
if val, ok := facilityMap[f]; ok {
return val
}
return "UNKNOWN"
}
func (p SyslogPriority) decode() (SyslogFacility, SyslogSeverity) {
return SyslogFacility(p / 8), SyslogSeverity(p % 8)
}
func (s syslogMessage) render(tpl *template.Template, buf *bytes.Buffer) error {
buf.Reset()
return tpl.Execute(buf, s)
}