i think logging is done

This commit is contained in:
2021-02-26 20:27:35 -05:00
parent d085d0f3ee
commit fe378850af
9 changed files with 589 additions and 24 deletions

View File

@@ -4,7 +4,6 @@ import (
native `log`
`os`
`path`
`strings`
"r00t2.io/goutils/types"
@@ -16,10 +15,15 @@ var (
_ = sysd.Enabled()
_ = native.Logger{}
_ = os.Interrupt
_ = types.Env{}
)
func GetLogger(enableDebug bool, prefix string) (logger Logger, err error) {
// GetLogger returns an instance of Logger that best suits your system's capabilities.
// If enableDebug is true, debug messages (which according to your program may or may not contain sensitive data) are rendered and written.
// If prefix is "\x00" (a null byte), then the default logging prefix will be used. If anything else, even an empty string,
// is specified then that will be used instead for the prefix.
// logpaths is an (optional) list of strings to use as paths to test for writing. If the file can be created/written to,
// it will be used (assuming you have no higher-level loggers available). Only the first logpaths entry that "works" will be used, later entries will be ignored.
func GetLogger(enableDebug bool, prefix string, logpaths ...string) (logger Logger, err error) {
var logPath string
var logflags types.MaskBit
@@ -40,8 +44,13 @@ func GetLogger(enableDebug bool, prefix string) (logger Logger, err error) {
if hasSyslog && !stat.Mode().IsRegular() {logflags.AddFlag(LogSyslog)} else {
var exists bool
var success bool
var ckLogPaths []string
logflags.AddFlag(LogStdout)
for _, p := range defLogPaths {
ckLogPaths = defLogPaths
if logpaths != nil {
ckLogPaths = logpaths
}
for _, p := range ckLogPaths {
if exists, _ = paths.RealPathExists(&p); exists {
if success, err = testOpen(p); err != nil {
continue
@@ -72,30 +81,34 @@ func GetLogger(enableDebug bool, prefix string) (logger Logger, err error) {
if logflags.HasFlag(LogJournald) {
logger = &SystemDLogger{
Prefix: logPrefix,
EnableDebug: enableDebug,
}
} else {
if logflags.HasFlag(LogSyslog) {
logger = &SyslogLogger{
Prefix: logPrefix,
EnableDebug: enableDebug,
}
} else {
if logflags.HasFlag(LogFile) {
logger = &FileLogger{
StdLogger: StdLogger{
Prefix: logPrefix,
EnableDebug: enableDebug,
},
Path: logPath,
}
} else {
logger = &StdLogger{
Prefix: logPrefix,
EnableDebug: enableDebug,
}
}
}
}
logger.doDebug(enableDebug)
if strings.TrimSpace(prefix) != "" {
logger.Setup()
if prefix != "\x00" {
logger.setPrefix(prefix)
}
@@ -106,7 +119,7 @@ func testOpen(path string) (success bool, err error) {
var f *os.File
// Example #2, https://golang.org/pkg/os/#OpenFile
if f, err = os.OpenFile(path, os.O_RDWR | os.O_CREATE, logPerm); err != nil {
if f, err = os.OpenFile(path, appendFlags, logPerm); err != nil {
return
}
defer f.Close()