Logger

Structured logging with levels and file output

go (1.21) 2025-11-12 logging file-io structured debug

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

RAW
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}
RAW
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!