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 }