Adding GetDebug method to loggers.

This commit is contained in:
brent s. 2022-09-07 06:03:28 -04:00
parent a2a849600b
commit a445a51c0d
Signed by: bts
GPG Key ID: 8C004C2F93481F6B
9 changed files with 141 additions and 83 deletions

View File

@ -37,6 +37,7 @@ Note that in the case of a MultiLogger, err (if not nil) will be a (r00t2.io/gou
logging.Logger types also have the following methods: logging.Logger types also have the following methods:


DoDebug(d bool) (err error) DoDebug(d bool) (err error)
GetDebug() (d bool)
SetPrefix(p string) (err error) SetPrefix(p string) (err error)
GetPrefix() (p string, err error) GetPrefix() (p string, err error)
Setup() (err error) Setup() (err error)

View File

@ -1,12 +1,12 @@
package logging package logging


import ( import (
`errors` "errors"
"fmt" "fmt"
`io/fs` "io/fs"
"log" "log"
"os" "os"
`strings` "strings"
) )


// Setup sets up/configures a FileLogger and prepares it for use. // Setup sets up/configures a FileLogger and prepares it for use.
@ -43,8 +43,8 @@ func (l *FileLogger) Shutdown() (err error) {
} }


/* /*
GetPrefix returns the prefix used by this FileLogger. GetPrefix returns the prefix used by this FileLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *FileLogger) GetPrefix() (prefix string, err error) { func (l *FileLogger) GetPrefix() (prefix string, err error) {


@ -54,9 +54,9 @@ func (l *FileLogger) GetPrefix() (prefix string, err error) {
} }


/* /*
DoDebug sets the debug state of this FileLogger. DoDebug sets the debug state of this FileLogger.
Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log. 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. err will always be nil; it's there for interface-compat.
*/ */
func (l *FileLogger) DoDebug(d bool) (err error) { func (l *FileLogger) DoDebug(d bool) (err error) {


@ -65,9 +65,17 @@ func (l *FileLogger) DoDebug(d bool) (err error) {
return return
} }


// GetDebug returns the debug status of this FileLogger.
func (l *FileLogger) GetDebug() (d bool) {

d = l.EnableDebug

return
}

/* /*
SetPrefix sets the prefix for this FileLogger. SetPrefix sets the prefix for this FileLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *FileLogger) SetPrefix(prefix string) (err error) { func (l *FileLogger) SetPrefix(prefix string) (err error) {



View File

@ -1,11 +1,11 @@
package logging package logging


import ( import (
`errors` "errors"
`fmt` "fmt"
`sync` "sync"


`r00t2.io/goutils/multierr` "r00t2.io/goutils/multierr"
) )


// Setup sets up/configures a MultiLogger (and all its MultiLogger.Loggers) and prepares it for use. // Setup sets up/configures a MultiLogger (and all its MultiLogger.Loggers) and prepares it for use.
@ -67,8 +67,8 @@ func (m *MultiLogger) Shutdown() (err error) {
} }


/* /*
GetPrefix returns the prefix used by this MultiLogger (and all its MultiLogger.Loggers). GetPrefix returns the prefix used by this MultiLogger (and all its MultiLogger.Loggers).
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (m *MultiLogger) GetPrefix() (prefix string, err error) { func (m *MultiLogger) GetPrefix() (prefix string, err error) {


@ -79,10 +79,10 @@ func (m *MultiLogger) GetPrefix() (prefix string, err error) {
} }


/* /*
DoDebug sets the debug state of this MultiLogger (and all its MultiLogger.Loggers). DoDebug sets the debug state of this MultiLogger (and all its MultiLogger.Loggers).
Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log. Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log.


If you had a logger-specific EnableDebug set, you will need to re-set it to your desired state after running this method. If you had a logger-specific EnableDebug set, you will need to re-set it to your desired state after running this method.
*/ */
func (m *MultiLogger) DoDebug(d bool) (err error) { func (m *MultiLogger) DoDebug(d bool) (err error) {


@ -114,10 +114,18 @@ func (m *MultiLogger) DoDebug(d bool) (err error) {
return return
} }


/* // GetDebug returns the debug status of this MultiLogger.
SetPrefix sets the prefix for this MultiLogger (and all its MultiLogger.Loggers). func (m *MultiLogger) GetDebug() (d bool) {


If you had a logger-specific Prefix set, you will need to re-set it to your desired prefix after running this method. d = m.EnableDebug

return
}

/*
SetPrefix sets the prefix for this MultiLogger (and all its MultiLogger.Loggers).

If you had a logger-specific Prefix set, you will need to re-set it to your desired prefix after running this method.
*/ */
func (m *MultiLogger) SetPrefix(prefix string) (err error) { func (m *MultiLogger) SetPrefix(prefix string) (err error) {



View File

@ -10,6 +10,14 @@ func (l *NullLogger) DoDebug(d bool) (err error) {
return return
} }


// GetDebug returns the debug status of this NullLogger. It will always return true. 🙃
func (n *NullLogger) GetDebug() (d bool) {

d = true

return
}

// SetPrefix does nothing at all; it's here for interface compat. 🙃 // SetPrefix does nothing at all; it's here for interface compat. 🙃
func (l *NullLogger) SetPrefix(p string) (err error) { func (l *NullLogger) SetPrefix(p string) (err error) {
return return

View File

@ -2,15 +2,15 @@ package logging


import ( import (
"fmt" "fmt"
`io` "io"
`log` "log"
`os` "os"
`strings` "strings"
) )


/* /*
Setup sets up/configures a StdLogger and prepares it for use. Setup sets up/configures a StdLogger and prepares it for use.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *StdLogger) Setup() (err error) { func (l *StdLogger) Setup() (err error) {


@ -47,8 +47,8 @@ func (l *StdLogger) Setup() (err error) {
} }


/* /*
Shutdown cleanly shuts down a StdLogger. Shutdown cleanly shuts down a StdLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *StdLogger) Shutdown() (err error) { func (l *StdLogger) Shutdown() (err error) {


@ -58,8 +58,8 @@ func (l *StdLogger) Shutdown() (err error) {
} }


/* /*
GetPrefix returns the prefix used by this StdLogger. GetPrefix returns the prefix used by this StdLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *StdLogger) GetPrefix() (prefix string, err error) { func (l *StdLogger) GetPrefix() (prefix string, err error) {


@ -69,9 +69,9 @@ func (l *StdLogger) GetPrefix() (prefix string, err error) {
} }


/* /*
DoDebug sets the debug state of this StdLogger. DoDebug sets the debug state of this StdLogger.
Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log. 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. err will always be nil; it's there for interface-compat.
*/ */
func (l *StdLogger) DoDebug(d bool) (err error) { func (l *StdLogger) DoDebug(d bool) (err error) {


@ -80,9 +80,17 @@ func (l *StdLogger) DoDebug(d bool) (err error) {
return return
} }


// GetDebug returns the debug status of this StdLogger.
func (l *StdLogger) GetDebug() (d bool) {

d = l.EnableDebug

return
}

/* /*
SetPrefix sets the prefix for this StdLogger. SetPrefix sets the prefix for this StdLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *StdLogger) SetPrefix(prefix string) (err error) { func (l *StdLogger) SetPrefix(prefix string) (err error) {



View File

@ -8,8 +8,8 @@ import (
) )


/* /*
Setup sets up/configures a SystemDLogger and prepares it for use. Setup sets up/configures a SystemDLogger and prepares it for use.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *SystemDLogger) Setup() (err error) { func (l *SystemDLogger) Setup() (err error) {


@ -19,8 +19,8 @@ func (l *SystemDLogger) Setup() (err error) {
} }


/* /*
Shutdown cleanly shuts down a SystemDLogger. Shutdown cleanly shuts down a SystemDLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *SystemDLogger) Shutdown() (err error) { func (l *SystemDLogger) Shutdown() (err error) {


@ -30,8 +30,8 @@ func (l *SystemDLogger) Shutdown() (err error) {
} }


/* /*
GetPrefix returns the prefix used by this SystemDLogger. GetPrefix returns the prefix used by this SystemDLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *SystemDLogger) GetPrefix() (prefix string, err error) { func (l *SystemDLogger) GetPrefix() (prefix string, err error) {


@ -41,9 +41,9 @@ func (l *SystemDLogger) GetPrefix() (prefix string, err error) {
} }


/* /*
DoDebug sets the debug state of this SystemDLogger. DoDebug sets the debug state of this SystemDLogger.
Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log. 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. err will always be nil; it's there for interface-compat.
*/ */
func (l *SystemDLogger) DoDebug(d bool) (err error) { func (l *SystemDLogger) DoDebug(d bool) (err error) {


@ -52,9 +52,17 @@ func (l *SystemDLogger) DoDebug(d bool) (err error) {
return return
} }


// GetDebug returns the debug status of this SystemDLogger.
func (l *SystemDLogger) GetDebug() (d bool) {

d = l.EnableDebug

return
}

/* /*
SetPrefix sets the prefix for this SystemDLogger. SetPrefix sets the prefix for this SystemDLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *SystemDLogger) SetPrefix(prefix string) (err error) { func (l *SystemDLogger) SetPrefix(prefix string) (err error) {



View File

@ -5,7 +5,7 @@ import (
"log" "log"
"log/syslog" "log/syslog"


`r00t2.io/goutils/multierr` "r00t2.io/goutils/multierr"
) )


// Setup sets up/configures a SyslogLogger and prepares it for use. // Setup sets up/configures a SyslogLogger and prepares it for use.
@ -73,8 +73,8 @@ func (l *SyslogLogger) Shutdown() (err error) {
} }


/* /*
GetPrefix returns the prefix used by this SyslogLogger. GetPrefix returns the prefix used by this SyslogLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *SyslogLogger) GetPrefix() (prefix string, err error) { func (l *SyslogLogger) GetPrefix() (prefix string, err error) {


@ -84,9 +84,9 @@ func (l *SyslogLogger) GetPrefix() (prefix string, err error) {
} }


/* /*
DoDebug sets the debug state of this SyslogLogger. 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. 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. err will always be nil; it's there for interface-compat.
*/ */
func (l *SyslogLogger) DoDebug(d bool) (err error) { func (l *SyslogLogger) DoDebug(d bool) (err error) {


@ -95,6 +95,14 @@ func (l *SyslogLogger) DoDebug(d bool) (err error) {
return return
} }


// GetDebug returns the debug status of this SyslogLogger.
func (l *SyslogLogger) GetDebug() (d bool) {

d = l.EnableDebug

return
}

// SetPrefix sets the prefix for this SyslogLogger. // SetPrefix sets the prefix for this SyslogLogger.
func (l *SyslogLogger) SetPrefix(prefix string) (err error) { func (l *SyslogLogger) SetPrefix(prefix string) (err error) {



View File

@ -1,26 +1,26 @@
package logging package logging


import ( import (
`errors` "errors"
`fmt` "fmt"
`os` "os"
`os/exec` "os/exec"
`syscall` "syscall"


`golang.org/x/sys/windows/registry` "golang.org/x/sys/windows/registry"
`golang.org/x/sys/windows/svc/eventlog` "golang.org/x/sys/windows/svc/eventlog"
`r00t2.io/sysutils/paths` "r00t2.io/sysutils/paths"
) )


/* /*
Setup sets up/configures a WinLogger and prepares it for use. Setup sets up/configures a WinLogger and prepares it for use.
This will fail with an Access Denied (the first time, at least) unless running with elevated permissions unless WinLogger.Prefix is This will fail with an Access Denied (the first time, at least) unless running with elevated permissions unless WinLogger.Prefix is
a registered Event Log source. a registered Event Log source.


If a failure occurs while trying to open the log with the given WinLogger.Prefix ("source"), a new Event Log source will be registered. If a failure occurs while trying to open the log with the given WinLogger.Prefix ("source"), a new Event Log source will be registered.
If WinLogger.Executable is not empty at the time of calling WinLogger.Setup (or WinLogger.ForceService is true), If WinLogger.Executable is not empty at the time of calling WinLogger.Setup (or WinLogger.ForceService is true),
eventlog.Install will be used (with the WinLogger.ExpandKey field). eventlog.Install will be used (with the WinLogger.ExpandKey field).
Otherwise eventlog.InstallAsEventCreate will be used. Otherwise eventlog.InstallAsEventCreate will be used.
*/ */
func (l *WinLogger) Setup() (err error) { func (l *WinLogger) Setup() (err error) {


@ -108,8 +108,8 @@ func (l *WinLogger) Remove() (err error) {
} }


/* /*
Shutdown cleanly shuts down a WinLogger but keep the source registered. Use WinLogger.Remove Shutdown cleanly shuts down a WinLogger but keep the source registered. Use WinLogger.Remove
(or set WinLogger.RemoveOnClose to true before calling WinLogger.Shutdown) to remove the registered source. (or set WinLogger.RemoveOnClose to true before calling WinLogger.Shutdown) to remove the registered source.
*/ */
func (l *WinLogger) Shutdown() (err error) { func (l *WinLogger) Shutdown() (err error) {


@ -128,8 +128,8 @@ func (l *WinLogger) Shutdown() (err error) {
} }


/* /*
GetPrefix returns the prefix used by this WinLogger. GetPrefix returns the prefix used by this WinLogger.
err will always be nil; it's there for interface-compat. err will always be nil; it's there for interface-compat.
*/ */
func (l *WinLogger) GetPrefix() (prefix string, err error) { func (l *WinLogger) GetPrefix() (prefix string, err error) {


@ -139,9 +139,9 @@ func (l *WinLogger) GetPrefix() (prefix string, err error) {
} }


/* /*
DoDebug sets the debug state of this WinLogger. DoDebug sets the debug state of this WinLogger.
Note that this merely acts as a *safety filter* for debug messages to avoid sensitive information being written to the log. 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. err will always be nil; it's there for interface-compat.
*/ */
func (l *WinLogger) DoDebug(d bool) (err error) { func (l *WinLogger) DoDebug(d bool) (err error) {


@ -150,6 +150,14 @@ func (l *WinLogger) DoDebug(d bool) (err error) {
return return
} }


// GetDebug returns the debug status of this WinLogger.
func (l *WinLogger) GetDebug() (d bool) {

d = l.EnableDebug

return
}

// SetPrefix sets the prefix for this WinLogger. // SetPrefix sets the prefix for this WinLogger.
func (l *WinLogger) SetPrefix(prefix string) (err error) { func (l *WinLogger) SetPrefix(prefix string) (err error) {



View File

@ -6,7 +6,7 @@ import (
) )


/* /*
Logger is one of the various loggers offered by this module. Logger is one of the various loggers offered by this module.
*/ */
type Logger interface { type Logger interface {
Alert(s string, v ...interface{}) (err error) Alert(s string, v ...interface{}) (err error)
@ -18,6 +18,7 @@ type Logger interface {
Notice(s string, v ...interface{}) (err error) Notice(s string, v ...interface{}) (err error)
Warning(s string, v ...interface{}) (err error) Warning(s string, v ...interface{}) (err error)
DoDebug(d bool) (err error) DoDebug(d bool) (err error)
GetDebug() (d bool)
SetPrefix(p string) (err error) SetPrefix(p string) (err error)
GetPrefix() (p string, err error) GetPrefix() (p string, err error)
Setup() (err error) Setup() (err error)
@ -25,8 +26,8 @@ type Logger interface {
} }


/* /*
StdLogger uses the log package in stdlib to perform all logging. The default is to write to STDOUT. StdLogger uses the log package in stdlib to perform all logging. The default is to write to STDOUT.
If you wish to modify the underling log.Logger object, you can access it directly via StdLogger.Logger. If you wish to modify the underling log.Logger object, you can access it directly via StdLogger.Logger.
*/ */
type StdLogger struct { type StdLogger struct {
// All log.Logger fields/methods are exposed. // All log.Logger fields/methods are exposed.
@ -71,11 +72,11 @@ type StdLogger struct {
} }


/* /*
FileLogger uses a StdLogger with a file handle writer to write to the file given at Path. FileLogger uses a StdLogger with a file handle writer to write to the file given at Path.


NOTE: If you wish to change the FileLogger.StdLogger.LogFlags, do *not* run FileLogger.StdLogger.Setup after doing so as this NOTE: If you wish to change the FileLogger.StdLogger.LogFlags, do *not* run FileLogger.StdLogger.Setup after doing so as this
will instead create a logger detached from the file handler. Instead, be sure to call FileLogger.Setup. will instead create a logger detached from the file handler. Instead, be sure to call FileLogger.Setup.
(Alternatively, run FileLogger.Shutdown and replace your logger with a new FileLogger.) (Alternatively, run FileLogger.Shutdown and replace your logger with a new FileLogger.)
*/ */
type FileLogger struct { type FileLogger struct {
// StdLogger is used for the log formation and handling. See StdLogger for more details. // StdLogger is used for the log formation and handling. See StdLogger for more details.