Files
herolib/lib/core/logger/readme.md
Mahmoud-Emad 52a1d2f80d feat: add real-time logging for tmux panes
- Introduce `tmux_logger` app for categorized output
- Implement pane logging via `tmux pipe-pane`
- Add `log`, `logpath`, `logreset` options to panes
- Update `Pane` struct with logging state and cleanup
- Refactor `logger.new` to use `LoggerFactoryArgs`
2025-09-01 19:48:15 +03:00

2.0 KiB

Logger Module

A simple logging system that provides structured logging with search capabilities.

Logs are stored in hourly files with a consistent format that makes them both human-readable and machine-parseable.

Features

  • Structured logging with categories and error types
  • Automatic timestamp management
  • Multi-line message support
  • Search functionality with filtering options
  • Human-readable log format

Usage

import freeflowuniverse.herolib.core.logger
import freeflowuniverse.herolib.data.ourtime

// Create a new logger
mut l := logger.new(path: '/var/logs')!

// Log a message
l.log(
    cat: 'system',
    log: 'System started successfully',
    logtype: .stdout
)!

// Log an error
l.log(
    cat: 'system',
    log: 'Failed to connect\nRetrying in 5 seconds...',
    logtype: .error
)!

// Search logs
results := l.search(
    timestamp_from: ourtime.now().warp("-24h"), // Last 24 hours
    cat: 'system',                               // Filter by category
    log: 'failed',                              // Search in message content
    logtype: .error,                            // Only error messages
    maxitems: 100                               // Limit results
)!

Log Format

Each log file is named using the format YYYY-MM-DD-HH.log and contains entries in the following format:

21:23:42
 system     - This is a normal log message
 system     - This is a multi-line message
              second line with proper indentation
              third line maintaining alignment
E error_cat - This is an error message
E             second line of error
E             third line of error

Format Rules

  • Time stamps (HH:MM:SS) are written once per second when the log time changes
  • Categories are:
    • Limited to 10 characters maximum
    • Padded with spaces to exactly 10 characters
    • Any - in category names are converted to _
  • Each line starts with either:
    • (space) for normal logs (LogType.stdout)
    • E for error logs (LogType.error)
  • Multi-line messages maintain consistent indentation (14 spaces after the prefix)