go_goutils/logging/funcs_file.go

232 lines
4.0 KiB
Go
Raw Normal View History

2021-02-26 15:52:29 -05:00
package logging
2021-02-26 20:27:35 -05:00
import (
2022-09-07 06:03:28 -04:00
"errors"
2021-02-27 00:51:58 -05:00
"fmt"
2022-09-07 06:03:28 -04:00
"io/fs"
2021-02-27 00:51:58 -05:00
"log"
"os"
2022-09-07 06:03:28 -04:00
"strings"
2021-02-26 20:27:35 -05:00
)
2022-01-05 05:15:38 -05:00
// Setup sets up/configures a FileLogger and prepares it for use.
func (l *FileLogger) Setup() (err error) {
2021-02-26 20:27:35 -05:00
// This uses a shared handle across the import. We don't want that.
// l.Logger = log.Default()
if l.Prefix != "" {
l.Prefix = strings.TrimRight(l.Prefix, " ") + " "
// l.Logger.SetPrefix(l.Prefix)
}
2021-02-26 20:27:35 -05:00
if l.writer, err = os.OpenFile(l.Path, appendFlags, logPerm); err != nil {
return
2021-02-26 20:27:35 -05:00
}
2022-01-16 06:55:29 -05:00
l.Logger = log.New(l.writer, l.Prefix, l.LogFlags)
// l.Logger.SetOutput(multi)
return
2021-02-26 20:27:35 -05:00
}
2022-01-05 05:15:38 -05:00
// Shutdown cleanly shuts down a FileLogger.
func (l *FileLogger) Shutdown() (err error) {
2021-02-26 20:27:35 -05:00
if err = l.writer.Close(); err != nil {
if !errors.Is(err, fs.ErrClosed) {
return
}
2022-01-16 06:55:29 -05:00
err = nil
return err
2021-02-26 20:27:35 -05:00
}
return
2021-02-26 20:27:35 -05:00
}
/*
2022-09-07 06:03:28 -04:00
GetPrefix returns the prefix used by this FileLogger.
err will always be nil; it's there for interface-compat.
*/
func (l *FileLogger) GetPrefix() (prefix string, err error) {
prefix = l.Prefix
return
2021-02-27 00:51:58 -05:00
}
2022-01-05 05:15:38 -05:00
/*
2022-09-07 06:03:28 -04:00
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.
err will always be nil; it's there for interface-compat.
2022-01-05 05:15:38 -05:00
*/
func (l *FileLogger) DoDebug(d bool) (err error) {
2021-02-26 15:52:29 -05:00
l.EnableDebug = d
return
2021-02-26 15:52:29 -05:00
}
2022-09-07 06:03:28 -04:00
// GetDebug returns the debug status of this FileLogger.
func (l *FileLogger) GetDebug() (d bool) {
d = l.EnableDebug
return
}
/*
2022-09-07 06:03:28 -04:00
SetPrefix sets the prefix for this FileLogger.
err will always be nil; it's there for interface-compat.
*/
func (l *FileLogger) SetPrefix(prefix string) (err error) {
l.Prefix = prefix
if prefix != "" {
l.Prefix = strings.TrimRight(l.Prefix, " ") + " "
}
l.Logger.SetPrefix(l.Prefix)
return
2021-02-26 15:52:29 -05:00
}
2022-01-05 05:15:38 -05:00
// Alert writes an ALERT-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Alert(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "ALERT")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Crit writes an CRITICAL-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Crit(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "CRITICAL")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Debug writes a DEBUG-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Debug(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
if !l.EnableDebug {
return
}
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "DEBUG")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Emerg writes an EMERGENCY-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Emerg(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "EMERGENCY")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Err writes an ERROR-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Err(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "ERROR")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Info writes an INFO-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Info(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "INFO")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Notice writes a NOTICE-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Notice(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "NOTICE")
2021-02-26 15:52:29 -05:00
return
}
2022-01-05 05:15:38 -05:00
// Warning writes a WARNING/WARN-level message to this FileLogger.
2021-02-26 15:52:29 -05:00
func (l *FileLogger) Warning(s string, v ...interface{}) (err error) {
2021-02-26 20:27:35 -05:00
var msg string
if v != nil {
msg = fmt.Sprintf(s, v...)
} else {
msg = s
}
l.renderWrite(msg, "WARNING")
return
}
2022-01-05 05:15:38 -05:00
// renderWrite prepares/formats a log message to be written to this FileLogger.
2021-02-26 20:27:35 -05:00
func (l *FileLogger) renderWrite(msg, prio string) {
s := fmt.Sprintf("[%v] %v", prio, msg)
l.Logger.Println(s)
2021-02-26 15:52:29 -05:00
return
}