2.8 KiB

Logger Package

A structured, high-performance logging package built on top of Logrus with the following features:

Features

  • Structured Logging: JSON and Text formats supported
  • Level-based Logging: Debug, Info, Warn, Error, Fatal, Panic, Trace
  • Performance Optimized: Low allocation design with sync.Pool
  • Context Support: Add request-scoped fields
  • Caller Information: Automatically include file and line numbers
  • Multiple Outputs: Stdout/Stderr separation
  • Thread-safe: Safe for concurrent use
  • Customizable: Various configuration options

Installation

import "zee/internal/helper/logger"

Basic Usage

Initialization

// Initialize with default configuration
logger.Init(&logger.LogConfig{
    Level:        "info",
    Format:       "json",
    EnableCaller: true,
    ReportCaller: true,
})

Logging Messages

// Simple logging
logger.Info("Application started")
logger.Debug("Debug information")
logger.Warn("Warning message")
logger.Error("Error occurred")

// With fields
logger.WithFields(logger.Fields{
    "key": "value",
    "num": 42,
}).Info("Log with fields")

// With error
if err != nil {
    logger.WithError(err).Error("Operation failed")
}

Configuration Options

Option Type Default Description
Level string "info" Log level (debug, info, warn, error, fatal, panic)
Format string "json" Output format (json, text)
EnableCaller bool true Include caller information
BufferSize int 256 Buffer size for async logging
DisableColor bool false Disable colored output (text format only)
ReportCaller bool true Report the calling method

Best Practices

  1. Use Appropriate Log Levels:

    • ERROR: Something failed, needs attention
    • WARN: Unexpected but handled situation
    • INFO: Important business process has started/ended
    • DEBUG: Detailed information for debugging
  2. Structured Logging:

    • Always use fields for structured data
    • Keep log messages concise and consistent
  3. Performance:

    • Use WithFields when logging multiple key-value pairs
    • Avoid expensive operations in log statements

Example Output

JSON Format

{
  "@timestamp": "2023-04-01T12:00:00Z",
  "level": "info",
  "message": "Request processed",
  "caller": "handler/user.go:42",
  "method": "GET",
  "path": "/api/users",
  "status": 200,
  "duration": 42.5,
  "request_id": "abc123"
}

Text Format

INFO[0000] Request processed  caller=handler/user.go:42 method=GET path=/api/users status=200 duration=42.5 request_id=abc123

Testing

# Run tests
go test -v ./...

# Run with race detector
go test -race ./...

License

MIT