2 Commits

Author SHA1 Message Date
a445a51c0d Adding GetDebug method to loggers. 2022-09-07 06:03:28 -04:00
a2a849600b Add docs for NullLogger. 2022-09-06 01:01:39 -04:00
9 changed files with 149 additions and 90 deletions

View File

@@ -3,18 +3,19 @@ Package logging implements and presents various loggers under a unified interfac
These particular loggers (logging.Logger) available are: These particular loggers (logging.Logger) available are:
NullLogger
StdLogger StdLogger
FileLogger FileLogger
SystemDLogger (Linux only) SystemDLogger (Linux only)
SyslogLogger (Linux only) SyslogLogger (Linux only)
WinLogger (Windows only) WinLogger (Windows only)
There is a sixth type of logging.Logger, MultiLogger, that allows for multiple loggers to be written to with a single call. There is a seventh type of logging.Logger, MultiLogger, that allows for multiple loggers to be written to with a single call.
As you may have guessed, NullLogger doesn't actually log anything but is fully "functional" as a logging.Logger.
Note that for some Loggers, the prefix may be modified - "literal" loggers (StdLogger and FileLogger) will append a space to the end of the prefix. Note that for some Loggers, the prefix may be modified - "literal" loggers (StdLogger and FileLogger) will append a space to the end of the prefix.
If this is undesired (unlikely), you will need to modify (Logger).Prefix and run (Logger).Logger.SetPrefix(yourPrefixHere) for the respective logger. If this is undesired (unlikely), you will need to modify (Logger).Prefix and run (Logger).Logger.SetPrefix(yourPrefixHere) for the respective logger.
Every logging.Logger type has the following methods that correspond to certain "levels". Every logging.Logger type has the following methods that correspond to certain "levels".
Alert(s string, v ...interface{}) (err error) Alert(s string, v ...interface{}) (err error)
@@ -36,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.
@@ -65,6 +65,14 @@ 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.

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.
@@ -114,6 +114,14 @@ func (m *MultiLogger) DoDebug(d bool) (err error) {
return return
} }
// GetDebug returns the debug status of this MultiLogger.
func (m *MultiLogger) GetDebug() (d bool) {
d = m.EnableDebug
return
}
/* /*
SetPrefix sets the prefix for this MultiLogger (and all its MultiLogger.Loggers). SetPrefix sets the prefix for this MultiLogger (and all its MultiLogger.Loggers).

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,10 +2,10 @@ package logging
import ( import (
"fmt" "fmt"
`io` "io"
`log` "log"
`os` "os"
`strings` "strings"
) )
/* /*
@@ -80,6 +80,14 @@ 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.

View File

@@ -52,6 +52,14 @@ 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.

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.
@@ -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,15 +1,15 @@
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"
) )
/* /*
@@ -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

@@ -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)