Skip to main content

Autonomous log analysis tool with configurable pattern rules, incremental detection, and rich output

Project description

Logowatch

Autonomous log analysis tool with configurable pattern rules, incremental detection, and rich output.

Features

  • Pattern-based rules - Define regex patterns to match in log files
  • Incremental detection - Only show new errors since last check
  • Extended options - Context, value extraction, aggregations
  • Multiple sources - Files, directories, glob patterns
  • Rich output - Colored CLI output with tables and panels
  • JSON output - Machine-readable output for automation
  • Legacy support - Convert from pipe-delimited format

Installation

pip install logowatch

Quick Start

1. Create a configuration file

logowatch init

This creates a logowatch.yaml file you can customize.

2. Run analysis

logowatch analyze logowatch.yaml

Quick scan a single file

logowatch scan /var/log/app.log --pattern "ERROR" --pattern "Exception"

Configuration

YAML Format

# logowatch.yaml

sources:
  - name: app
    path: /var/log/app.log
    type: file

  - name: errors
    path: /var/log/app/errors/
    type: directory
    pattern: "*.log"

rules:
  # Basic rule
  - pattern: "ERROR|CRITICAL"
    description: "Application errors"
    severity: error
    source: app

  # With context (show lines after match)
  - pattern: "Traceback"
    description: "Python exceptions"
    severity: error
    source: app
    options:
      context:
        after: 10

  # Extract values
  - pattern: "user_id=\\d+"
    description: "Errors with user IDs"
    severity: error
    source: app
    options:
      extract:
        pattern: "user_id=(\\d+)"
        name: "user_id"

  # Aggregate by extracted value
  - pattern: "status_code=\\d+"
    description: "HTTP status codes"
    severity: warning
    source: app
    options:
      extract:
        pattern: "status_code=(\\d+)"
        name: "status"
      aggregate:
        by: "(\\d{3})"
        format: count

  # Case-insensitive matching
  - pattern: "timeout|connection refused"
    description: "Connection issues"
    severity: warning
    source: app
    case_insensitive: true

Rule Options

Option Description
context.before Lines to show before match
context.after Lines to show after match
extract.pattern Regex with capture group
extract.name Name for extracted value
aggregate.by Regex for grouping
find_related.pattern Related pattern to find
find_related.lines Lines to search
find_related.direction before/after/both

Severity Levels

  • error - Critical issues (shown in red)
  • warning - Warnings (shown in yellow)
  • info - Informational (shown in cyan)

CLI Commands

analyze

Run full analysis with configuration file:

logowatch analyze config.yaml [OPTIONS]

Options:
  -l, --limit INTEGER      Max examples per rule (default: 5)
  --no-incremental         Show all errors (not just new)
  -s, --source TEXT        Analyze specific source(s)
  --json                   Output as JSON
  -c, --cache-path PATH    Custom cache file path

scan

Quick scan a single file:

logowatch scan logfile.log [OPTIONS]

Options:
  -p, --pattern TEXT    Pattern(s) to search for
  -l, --limit INTEGER   Max matches (default: 10)

convert

Convert legacy pipe-delimited config to YAML:

logowatch convert rules.conf -o logowatch.yaml

init

Create sample configuration:

logowatch init

Incremental Mode

By default, logowatch tracks which lines it has already processed and only shows new errors since the last check. This is perfect for daily monitoring.

Cache is stored in .logowatch_cache.json by default.

To show all errors (ignore cache):

logowatch analyze config.yaml --no-incremental

Python API

from logowatch import LogAnalyzer, load_config

# Load configuration
config = load_config("logowatch.yaml")

# Create analyzer
analyzer = LogAnalyzer(config, incremental=True)

# Run analysis
result = analyzer.analyze()

# Check results
print(f"Errors: {result.total_errors}")
print(f"Warnings: {result.total_warnings}")

for rule_result in result.rule_results:
    print(f"{rule_result.rule.description}: {rule_result.total_count}")
    for match in rule_result.matches[:3]:
        print(f"  {match.content}")

Legacy Format Support

If you have existing rules in pipe-delimited format:

# pattern|description|severity|show_source|case_insensitive|source|options
ERROR|Application errors|ERROR|true|false|app
Timeout|Timeout issues|WARNING|false|true|app|{"context": {"after": 3}}

Convert to YAML:

logowatch convert rules.conf -o logowatch.yaml

License

MIT

Author

LifeAiTools Team dev@muid.io

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

logowatch-0.4.1.tar.gz (60.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

logowatch-0.4.1-py3-none-any.whl (31.8 kB view details)

Uploaded Python 3

File details

Details for the file logowatch-0.4.1.tar.gz.

File metadata

  • Download URL: logowatch-0.4.1.tar.gz
  • Upload date:
  • Size: 60.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for logowatch-0.4.1.tar.gz
Algorithm Hash digest
SHA256 228185646bcee72890778fac30f9f3d0bef47cebea2e2f0ce146811c03d8f8b7
MD5 2296f72003e28a01b0f4d2d435729e10
BLAKE2b-256 9849305b5843df7773b9cd5aebeb02053b736a6ed1d676cd4ace269cefcc92f5

See more details on using hashes here.

File details

Details for the file logowatch-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: logowatch-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 31.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for logowatch-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0b0d3aa0db5ba3d9467963544ed2f62de7a0b6fbe9edf5db18ad1076d52b305e
MD5 644e50eefc3f9c060233f3f612f71e8b
BLAKE2b-256 180e95b22ba14e0d0409a33230b795090bbfe5e3ea726f1aa3d0230cd0321376

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page