2021-02-26 15:52:29 -05:00
|
|
|
package logging
|
|
|
|
|
2021-02-26 20:27:35 -05:00
|
|
|
import (
|
2021-02-27 00:51:58 -05:00
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"log"
|
|
|
|
"os"
|
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.
|
2021-02-26 20:27:35 -05:00
|
|
|
func (l *FileLogger) Setup() {
|
|
|
|
|
|
|
|
var err error
|
2022-01-05 16:16:24 -05:00
|
|
|
var multi io.Writer
|
2021-02-26 20:27:35 -05:00
|
|
|
|
|
|
|
l.Logger = log.Default()
|
2022-01-05 16:16:24 -05:00
|
|
|
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 {
|
|
|
|
log.Panicf("could not open log file \"%v\" for writing: %v\n", l.Path, err)
|
|
|
|
}
|
|
|
|
// https://stackoverflow.com/a/36719588/733214
|
2022-01-05 16:16:24 -05:00
|
|
|
if l.EnableStdOut {
|
|
|
|
multi = io.MultiWriter(os.Stdout, l.writer)
|
|
|
|
} else {
|
|
|
|
multi = l.writer
|
|
|
|
}
|
2021-02-26 20:27:35 -05:00
|
|
|
l.Logger.SetOutput(multi)
|
|
|
|
}
|
|
|
|
|
2022-01-05 05:15:38 -05:00
|
|
|
// Shutdown cleanly shuts down a FileLogger.
|
2021-02-26 20:27:35 -05:00
|
|
|
func (l *FileLogger) Shutdown() {
|
|
|
|
|
|
|
|
var err error
|
|
|
|
|
|
|
|
if err = l.writer.Close(); err != nil {
|
|
|
|
log.Panicf("could not close log file \"%v\": %v\n", l.Path, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-01-05 05:15:38 -05:00
|
|
|
// GetPrefix returns the prefix used by this FileLogger.
|
2021-02-27 00:51:58 -05:00
|
|
|
func (l *FileLogger) GetPrefix() string {
|
|
|
|
return l.Prefix
|
|
|
|
}
|
|
|
|
|
2022-01-05 05:15:38 -05: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.
|
|
|
|
*/
|
2021-03-27 10:29:41 -04:00
|
|
|
func (l *FileLogger) DoDebug(d bool) {
|
2021-02-26 15:52:29 -05:00
|
|
|
l.EnableDebug = d
|
|
|
|
}
|
|
|
|
|
2022-01-05 05:15:38 -05:00
|
|
|
// SetPrefix sets the prefix for this FileLogger.
|
2021-03-27 10:29:41 -04:00
|
|
|
func (l *FileLogger) SetPrefix(prefix string) {
|
2022-01-05 16:16:24 -05:00
|
|
|
|
|
|
|
l.Prefix = prefix + " "
|
|
|
|
l.Logger.SetPrefix(prefix + " ")
|
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
|
|
|
|
}
|