Logger
Structured logging with levels and file output
Description
A simple structured logger with configurable log levels, file output, and formatted messages. Supports different log levels and optional file rotation.
Features
- Log levels (DEBUG, INFO, WARN, ERROR)
- File output
- Formatted timestamps
- Level filtering
Code
package loggerimport ( "fmt" "io" "log" "os" "time")type Level intconst ( DEBUG Level = iota INFO WARN ERROR)type Logger struct { level Level output io.Writer logger *log.Logger}func NewLogger(level Level, output io.Writer) *Logger { return &Logger{ level: level, output: output, logger: log.New(output, "", 0), }}func (l *Logger) Debug(format string, v ...interface{}) { if l.level <= DEBUG { l.log("DEBUG", format, v...) }}func (l *Logger) Info(format string, v ...interface{}) { if l.level <= INFO { l.log("INFO", format, v...) }}func (l *Logger) Warn(format string, v ...interface{}) { if l.level <= WARN { l.log("WARN", format, v...) }}func (l *Logger) Error(format string, v ...interface{}) { if l.level <= ERROR { l.log("ERROR", format, v...) }}func (l *Logger) log(level, format string, v ...interface{}) { timestamp := time.Now().Format("2006-01-02 15:04:05") message := fmt.Sprintf(format, v...) l.logger.Printf("[%s] [%s] %s", timestamp, level, message)}func NewFileLogger(level Level, filepath string) (*Logger, error) { file, err := os.OpenFile(filepath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { return nil, err } return NewLogger(level, file), nil}
package mainimport ( "os" "logger")func main() { log := logger.NewLogger(logger.INFO, os.Stdout) log.Debug("Debug information") log.Info("Application started") log.Warn("Warning: low memory") log.Error("Error occurred")}
Comments
No comments yet. Be the first to comment!
Please login to leave a comment.