2024-03-27 03:26:20 -06:00
|
|
|
package logger
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Logger holds the log package's Logger instance.
|
|
|
|
type Logger struct {
|
|
|
|
*log.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewLogger creates a new Logger instance. By default, it logs to stdout.
|
|
|
|
func NewLogger() *Logger {
|
|
|
|
return &Logger{
|
|
|
|
Logger: log.New(os.Stdout, "", log.LstdFlags),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// LogToFile configures the logger to log to a specified file.
|
|
|
|
func (l *Logger) LogToFile(filePath string) error {
|
|
|
|
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
l.SetOutput(file)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// LogToStdout configures the logger to log to stdout.
|
|
|
|
func (l *Logger) LogToStdout() {
|
|
|
|
l.SetOutput(os.Stdout)
|
|
|
|
}
|
|
|
|
|
|
|
|
// LogToBoth configures the logger to log to both a file and stdout.
|
|
|
|
func (l *Logger) LogToBoth(filePath string) error {
|
|
|
|
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
multi := io.MultiWriter(file, os.Stdout)
|
|
|
|
l.SetOutput(multi)
|
|
|
|
return nil
|
|
|
|
}
|