mirror of
https://github.com/42wim/matterbridge.git
synced 2024-12-05 02:39:28 +01:00
59 lines
1.9 KiB
Go
59 lines
1.9 KiB
Go
|
package srslog
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const appNameMaxLength = 48 // limit to 48 chars as per RFC5424
|
||
|
|
||
|
// Formatter is a type of function that takes the consituent parts of a
|
||
|
// syslog message and returns a formatted string. A different Formatter is
|
||
|
// defined for each different syslog protocol we support.
|
||
|
type Formatter func(p Priority, hostname, tag, content string) string
|
||
|
|
||
|
// DefaultFormatter is the original format supported by the Go syslog package,
|
||
|
// and is a non-compliant amalgamation of 3164 and 5424 that is intended to
|
||
|
// maximize compatibility.
|
||
|
func DefaultFormatter(p Priority, hostname, tag, content string) string {
|
||
|
timestamp := time.Now().Format(time.RFC3339)
|
||
|
msg := fmt.Sprintf("<%d> %s %s %s[%d]: %s",
|
||
|
p, timestamp, hostname, tag, os.Getpid(), content)
|
||
|
return msg
|
||
|
}
|
||
|
|
||
|
// UnixFormatter omits the hostname, because it is only used locally.
|
||
|
func UnixFormatter(p Priority, hostname, tag, content string) string {
|
||
|
timestamp := time.Now().Format(time.Stamp)
|
||
|
msg := fmt.Sprintf("<%d>%s %s[%d]: %s",
|
||
|
p, timestamp, tag, os.Getpid(), content)
|
||
|
return msg
|
||
|
}
|
||
|
|
||
|
// RFC3164Formatter provides an RFC 3164 compliant message.
|
||
|
func RFC3164Formatter(p Priority, hostname, tag, content string) string {
|
||
|
timestamp := time.Now().Format(time.Stamp)
|
||
|
msg := fmt.Sprintf("<%d>%s %s %s[%d]: %s",
|
||
|
p, timestamp, hostname, tag, os.Getpid(), content)
|
||
|
return msg
|
||
|
}
|
||
|
|
||
|
// if string's length is greater than max, then use the last part
|
||
|
func truncateStartStr(s string, max int) string {
|
||
|
if (len(s) > max) {
|
||
|
return s[len(s) - max:]
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
// RFC5424Formatter provides an RFC 5424 compliant message.
|
||
|
func RFC5424Formatter(p Priority, hostname, tag, content string) string {
|
||
|
timestamp := time.Now().Format(time.RFC3339)
|
||
|
pid := os.Getpid()
|
||
|
appName := truncateStartStr(os.Args[0], appNameMaxLength)
|
||
|
msg := fmt.Sprintf("<%d>%d %s %s %s %d %s - %s",
|
||
|
p, 1, timestamp, hostname, appName, pid, tag, content)
|
||
|
return msg
|
||
|
}
|