85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
package logger
|
|
|
|
import (
|
|
"io"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
// LogLevel type for defining different logging levels.
|
|
type LogLevel int
|
|
|
|
const (
|
|
// Define different log levels.
|
|
LogLevelInfo LogLevel = iota
|
|
LogLevelWarning
|
|
LogLevelError
|
|
)
|
|
|
|
// Logger wraps the standard log.Logger from the Go standard library.
|
|
// It adds additional functionality like setting log levels.
|
|
type Logger struct {
|
|
*log.Logger
|
|
level LogLevel
|
|
}
|
|
|
|
// NewLogger creates a new Logger instance. By default, it logs to stdout with LogLevelInfo.
|
|
func NewLogger() *Logger {
|
|
return &Logger{
|
|
Logger: log.New(os.Stdout, "", log.LstdFlags),
|
|
level: LogLevelInfo,
|
|
}
|
|
}
|
|
|
|
// SetLevel changes the logging level of the Logger.
|
|
func (l *Logger) SetLevel(level LogLevel) {
|
|
l.level = level
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
// Info logs a message at level Info, respecting the set log level.
|
|
func (l *Logger) Info(msg string) {
|
|
if l.level <= LogLevelInfo {
|
|
l.Println("INFO: " + msg)
|
|
}
|
|
}
|
|
|
|
// Warning logs a message at level Warning, respecting the set log level.
|
|
func (l *Logger) Warning(msg string) {
|
|
if l.level <= LogLevelWarning {
|
|
l.Println("WARNING: " + msg)
|
|
}
|
|
}
|
|
|
|
// Error logs a message at level Error, respecting the set log level.
|
|
func (l *Logger) Error(msg string) {
|
|
if l.level <= LogLevelError {
|
|
l.Println("ERROR: " + msg)
|
|
}
|
|
}
|