Windows Event Log, error output

Adding more Event Log support, and modifying the loggers so they return
errors in their operational functions.
This commit is contained in:
2022-01-16 02:05:42 -05:00
parent 3d0d420454
commit 39e0a1fd43
18 changed files with 612 additions and 220 deletions

View File

@@ -4,55 +4,79 @@ import (
"fmt"
"log"
"log/syslog"
`r00t2.io/goutils/multierr`
)
// Setup sets up/configures a SyslogLogger and prepares it for use.
func (l *SyslogLogger) Setup() {
func (l *SyslogLogger) Setup() (err error) {
var err error
var errs *multierr.MultiError = multierr.NewMultiError(nil)
if l.alert, err = syslog.New(syslog.LOG_ALERT|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Alert")
errs.AddError(err)
err = nil
}
if l.crit, err = syslog.New(syslog.LOG_CRIT|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Crit")
errs.AddError(err)
err = nil
}
if l.debug, err = syslog.New(syslog.LOG_DEBUG|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Debug")
errs.AddError(err)
err = nil
}
if l.emerg, err = syslog.New(syslog.LOG_EMERG|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Emerg")
errs.AddError(err)
err = nil
}
if l.err, err = syslog.New(syslog.LOG_ERR|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Err")
errs.AddError(err)
err = nil
}
if l.info, err = syslog.New(syslog.LOG_INFO|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Info")
errs.AddError(err)
err = nil
}
if l.notice, err = syslog.New(syslog.LOG_NOTICE|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Notice")
errs.AddError(err)
err = nil
}
if l.warning, err = syslog.New(syslog.LOG_WARNING|syslogFacility, l.Prefix); err != nil {
log.Panicln("could not open log for Warning")
errs.AddError(err)
err = nil
}
if errs.Count() > 0 {
err = errs
}
return
}
// Shutdown cleanly shuts down a SyslogLogger.
func (l *SyslogLogger) Shutdown() {
func (l *SyslogLogger) Shutdown() (err error) {
var err error
var errs *multierr.MultiError = multierr.NewMultiError(nil)
for _, i := range []*syslog.Writer{l.alert, l.crit, l.debug, l.emerg, l.err, l.info, l.notice, l.warning} {
if err = i.Close(); err != nil {
log.Panicf("could not close log %#v\n", i)
errs.AddError(err)
err = nil
}
}
if errs.Count() > 0 {
err = errs
}
return
}
// GetPrefix returns the prefix used by this SyslogLogger.
func (l *SyslogLogger) GetPrefix() (prefix string) {
/*
GetPrefix returns the prefix used by this SyslogLogger.
err will always be nil; it's there for interface-compat.
*/
func (l *SyslogLogger) GetPrefix() (prefix string, err error) {
prefix = l.Prefix
@@ -62,15 +86,30 @@ func (l *SyslogLogger) GetPrefix() (prefix string) {
/*
DoDebug sets the debug state of this SyslogLogger.
Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log.
err will always be nil; it's there for interface-compat.
*/
func (l *SyslogLogger) DoDebug(d bool) {
func (l *SyslogLogger) DoDebug(d bool) (err error) {
l.EnableDebug = d
return
}
// SetPrefix sets the prefix for this SyslogLogger.
func (l *SyslogLogger) SetPrefix(prefix string) {
func (l *SyslogLogger) SetPrefix(prefix string) (err error) {
l.Prefix = prefix
l.Setup()
// We need to close the current loggers first.
if err = l.Shutdown(); err != nil {
return
}
if err = l.Setup(); err != nil {
return
}
return
}
// Alert writes an ALERT-level message to this SyslogLogger.