syslog writing works

This commit is contained in:
2026-01-12 17:43:06 +01:00
parent 306535c933
commit cdf6a6c44a
7 changed files with 269 additions and 127 deletions

115
src/ma/archiver/syslog.go Normal file
View File

@@ -0,0 +1,115 @@
package archiver
import (
"encoding/json"
"log"
"log/syslog"
"ma/config"
)
var syslogWriter *syslog.Writer
func InitSyslog() {
if config.Config.Syslog.Enable == "true" {
// Parse facility
facility := parseFacility(config.Config.Syslog.Facility)
// Parse severity
severity := parseSeverity(config.Config.Syslog.Severity)
// Combine to priority
priority := facility | severity
var err error
syslogWriter, err = syslog.Dial(
config.Config.Syslog.Network,
config.Config.Syslog.Server,
priority,
config.Config.Syslog.Tag,
)
if err != nil {
log.Fatalf("Failed to connect to syslog server: %v", err)
}
log.Printf("Syslog connection established: %s://%s", config.Config.Syslog.Network, config.Config.Syslog.Server)
}
}
func WriteSyslog(message Message) {
if syslogWriter != nil {
jsonData, err := json.Marshal(message)
if err != nil {
log.Printf("Failed to marshal message to JSON: %v", err)
return
}
// Send to syslog based on configured severity
switch config.Config.Syslog.Severity {
case "emerg":
syslogWriter.Emerg(string(jsonData))
case "alert":
syslogWriter.Alert(string(jsonData))
case "crit":
syslogWriter.Crit(string(jsonData))
case "err":
syslogWriter.Err(string(jsonData))
case "warning":
syslogWriter.Warning(string(jsonData))
case "notice":
syslogWriter.Notice(string(jsonData))
case "info":
syslogWriter.Info(string(jsonData))
case "debug":
syslogWriter.Debug(string(jsonData))
default:
syslogWriter.Info(string(jsonData))
}
}
}
func parseFacility(facility string) syslog.Priority {
facilities := map[string]syslog.Priority{
"kern": syslog.LOG_KERN,
"user": syslog.LOG_USER,
"mail": syslog.LOG_MAIL,
"daemon": syslog.LOG_DAEMON,
"auth": syslog.LOG_AUTH,
"syslog": syslog.LOG_SYSLOG,
"lpr": syslog.LOG_LPR,
"news": syslog.LOG_NEWS,
"uucp": syslog.LOG_UUCP,
"cron": syslog.LOG_CRON,
"authpriv": syslog.LOG_AUTHPRIV,
"ftp": syslog.LOG_FTP,
"local0": syslog.LOG_LOCAL0,
"local1": syslog.LOG_LOCAL1,
"local2": syslog.LOG_LOCAL2,
"local3": syslog.LOG_LOCAL3,
"local4": syslog.LOG_LOCAL4,
"local5": syslog.LOG_LOCAL5,
"local6": syslog.LOG_LOCAL6,
"local7": syslog.LOG_LOCAL7,
}
if f, ok := facilities[facility]; ok {
return f
}
return syslog.LOG_LOCAL0 // Default
}
func parseSeverity(severity string) syslog.Priority {
severities := map[string]syslog.Priority{
"emerg": syslog.LOG_EMERG,
"alert": syslog.LOG_ALERT,
"crit": syslog.LOG_CRIT,
"err": syslog.LOG_ERR,
"warning": syslog.LOG_WARNING,
"notice": syslog.LOG_NOTICE,
"info": syslog.LOG_INFO,
"debug": syslog.LOG_DEBUG,
}
if s, ok := severities[severity]; ok {
return s
}
return syslog.LOG_INFO // Default
}