40 lines
1,001 B
Go
40 lines
1,001 B
Go
|
package circolog
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"text/template"
|
||
|
"time"
|
||
|
|
||
|
"gopkg.in/mcuadros/go-syslog.v2/format"
|
||
|
)
|
||
|
|
||
|
// Formatter is an interface, so that multiple implementations can exist
|
||
|
type Formatter func(format.LogParts) string
|
||
|
|
||
|
var tmplFuncs template.FuncMap
|
||
|
var syslogTmpl *template.Template
|
||
|
|
||
|
func init() {
|
||
|
tmplFuncs := template.FuncMap{
|
||
|
"dateFormat": func(dt time.Time, fmt string) string {
|
||
|
return dt.Format(fmt)
|
||
|
},
|
||
|
"rfc822": func(dt time.Time) string {
|
||
|
return dt.Format(time.RFC822)
|
||
|
},
|
||
|
}
|
||
|
syslogTmpl = template.Must(template.New("syslog").Funcs(tmplFuncs).Parse(
|
||
|
"{{rfc822 (index . \"timestamp\")}} {{index . \"hostname\"}} " +
|
||
|
"{{index . \"app_name\"}}" +
|
||
|
"{{ if (ne (index . \"proc_id\") \"-\")}}[{{index . \"proc_id\"}}]{{end}}: " +
|
||
|
"{{index . \"message\"}}",
|
||
|
))
|
||
|
}
|
||
|
|
||
|
// FormatSyslog format a message in the typical format used in /var/log/messages
|
||
|
func FormatSyslog(msg format.LogParts) string {
|
||
|
var buf bytes.Buffer
|
||
|
syslogTmpl.Execute(&buf, msg)
|
||
|
return buf.String()
|
||
|
}
|