133 lines
2.8 KiB
Go
133 lines
2.8 KiB
Go
//go:build !windows
|
|
|
|
package config
|
|
|
|
import (
|
|
"errors"
|
|
"log/syslog"
|
|
|
|
"github.com/asaskevich/govalidator"
|
|
"golang.org/x/xerrors"
|
|
)
|
|
|
|
// SyslogConf is syslog config
|
|
type SyslogConf struct {
|
|
Protocol string `json:"-"`
|
|
Host string `valid:"host" json:"-"`
|
|
Port string `valid:"port" json:"-"`
|
|
Severity string `json:"-"`
|
|
Facility string `json:"-"`
|
|
Tag string `json:"-"`
|
|
Verbose bool `json:"-"`
|
|
Enabled bool `toml:"-" json:"-"`
|
|
}
|
|
|
|
// Validate validates configuration
|
|
func (c *SyslogConf) Validate() (errs []error) {
|
|
if !c.Enabled {
|
|
return nil
|
|
}
|
|
// If protocol is empty, it will connect to the local syslog server.
|
|
if len(c.Protocol) > 0 && c.Protocol != "tcp" && c.Protocol != "udp" {
|
|
errs = append(errs, errors.New(`syslog.protocol must be "tcp" or "udp"`))
|
|
}
|
|
|
|
// Default port: 514
|
|
if c.Port == "" {
|
|
c.Port = "514"
|
|
}
|
|
|
|
if _, err := c.GetSeverity(); err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
|
|
if _, err := c.GetFacility(); err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
|
|
if _, err := govalidator.ValidateStruct(c); err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
return errs
|
|
}
|
|
|
|
// GetSeverity gets severity
|
|
func (c *SyslogConf) GetSeverity() (syslog.Priority, error) {
|
|
if c.Severity == "" {
|
|
return syslog.LOG_INFO, nil
|
|
}
|
|
|
|
switch c.Severity {
|
|
case "emerg":
|
|
return syslog.LOG_EMERG, nil
|
|
case "alert":
|
|
return syslog.LOG_ALERT, nil
|
|
case "crit":
|
|
return syslog.LOG_CRIT, nil
|
|
case "err":
|
|
return syslog.LOG_ERR, nil
|
|
case "warning":
|
|
return syslog.LOG_WARNING, nil
|
|
case "notice":
|
|
return syslog.LOG_NOTICE, nil
|
|
case "info":
|
|
return syslog.LOG_INFO, nil
|
|
case "debug":
|
|
return syslog.LOG_DEBUG, nil
|
|
default:
|
|
return -1, xerrors.Errorf("Invalid severity: %s", c.Severity)
|
|
}
|
|
}
|
|
|
|
// GetFacility gets facility
|
|
func (c *SyslogConf) GetFacility() (syslog.Priority, error) {
|
|
if c.Facility == "" {
|
|
return syslog.LOG_AUTH, nil
|
|
}
|
|
|
|
switch c.Facility {
|
|
case "kern":
|
|
return syslog.LOG_KERN, nil
|
|
case "user":
|
|
return syslog.LOG_USER, nil
|
|
case "mail":
|
|
return syslog.LOG_MAIL, nil
|
|
case "daemon":
|
|
return syslog.LOG_DAEMON, nil
|
|
case "auth":
|
|
return syslog.LOG_AUTH, nil
|
|
case "syslog":
|
|
return syslog.LOG_SYSLOG, nil
|
|
case "lpr":
|
|
return syslog.LOG_LPR, nil
|
|
case "news":
|
|
return syslog.LOG_NEWS, nil
|
|
case "uucp":
|
|
return syslog.LOG_UUCP, nil
|
|
case "cron":
|
|
return syslog.LOG_CRON, nil
|
|
case "authpriv":
|
|
return syslog.LOG_AUTHPRIV, nil
|
|
case "ftp":
|
|
return syslog.LOG_FTP, nil
|
|
case "local0":
|
|
return syslog.LOG_LOCAL0, nil
|
|
case "local1":
|
|
return syslog.LOG_LOCAL1, nil
|
|
case "local2":
|
|
return syslog.LOG_LOCAL2, nil
|
|
case "local3":
|
|
return syslog.LOG_LOCAL3, nil
|
|
case "local4":
|
|
return syslog.LOG_LOCAL4, nil
|
|
case "local5":
|
|
return syslog.LOG_LOCAL5, nil
|
|
case "local6":
|
|
return syslog.LOG_LOCAL6, nil
|
|
case "local7":
|
|
return syslog.LOG_LOCAL7, nil
|
|
default:
|
|
return -1, xerrors.Errorf("Invalid facility: %s", c.Facility)
|
|
}
|
|
}
|