log-analyzer
SKILL.md
Log Analyzer Skill
Parse and analyze log files for patterns, errors, trends, and statistics.
When to Use
✅ USE this skill when:
- "Analyze this log file"
- "Find errors in logs"
- "Extract patterns from logs"
- "Statistics from log file"
- "Count log entries by type"
When NOT to Use
❌ DON'T use this skill when:
- Real-time log streaming → use file-watcher + tail
- Structured data analysis → use json-yaml-query
- Log shipping → use log forwarders
Commands
Basic Analysis
{baseDir}/analyze.sh <logfile>
{baseDir}/analyze.sh /var/log/app.log
{baseDir}/analyze.sh app.log --summary
Error Analysis
{baseDir}/analyze.sh app.log --errors
{baseDir}/analyze.sh app.log --errors-only
{baseDir}/analyze.sh app.log --error-count
{baseDir}/analyze.sh app.log --error-pattern "Failed|Error|Exception"
Pattern Matching
{baseDir}/analyze.sh app.log --pattern "user: \d+"
{baseDir}/analyze.sh app.log --pattern "error|warning" --count
{baseDir}/analyze.sh app.log --pattern "Exception" --context 3
Time-based Analysis
{baseDir}/analyze.sh app.log --time-range "2024-01-01" "2024-01-02"
{baseDir}/analyze.sh app.log --last 1h
{baseDir}/analyze.sh app.log --last 24h
{baseDir}/analyze.sh app.log --hourly
{baseDir}/analyze.sh app.log --timeline
Log Formats
{baseDir}/analyze.sh access.log --format apache
{baseDir}/analyze.sh nginx.log --format nginx
{baseDir}/analyze.sh app.log --format json
{baseDir}/analyze.sh syslog --format syslog
{baseDir}/analyze.sh app.log --format custom --regex '\[(.*?)\] (\w+): (.*)'
Statistics
{baseDir}/analyze.sh app.log --stats
{baseDir}/analyze.sh app.log --count-by level
{baseDir}/analyze.sh app.log --count-by hour
{baseDir}/analyze.sh app.log --unique "ip"
{baseDir}/analyze.sh app.log --top 10 error
Options
| Option | Description | Default |
|---|---|---|
--summary |
Show summary overview | false |
--errors |
Show error entries | false |
--errors-only |
Only show errors (hide others) | false |
--error-pattern REGEX |
Custom error pattern | built-in |
--pattern REGEX |
Search for pattern | None |
--count |
Count pattern matches | false |
--context N |
Show N lines of context | 0 |
--time-range START END |
Filter by time range | None |
--last DURATION |
Last N duration (e.g., 1h, 24h, 7d) | None |
--hourly |
Group by hour | false |
--timeline |
Show events timeline | false |
--stats |
Show statistics | false |
--count-by FIELD |
Count by field | None |
--unique FIELD |
Unique values in field | None |
--top N FIELD |
Top N values by field | None |
--format FORMAT |
Log format: apache, nginx, json, syslog, custom | auto-detect |
--regex REGEX |
Custom regex for format | None |
--output FORMAT |
Output format: text, json, csv | text |
Log Formats
Apache Combined Log
127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
Auto-detected. Use --format apache.
Nginx Log
127.0.0.1 - - [10/Oct/2000:13:55:36 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0"
Auto-detected. Use --format nginx.
JSON Log
{"timestamp": "2024-01-01T00:00:00Z", "level": "INFO", "message": "Started"}
Auto-detected. Use --format json.
Syslog
Jan 1 00:00:00 hostname process[pid]: message
Auto-detected. Use --format syslog.
Custom Format
Use --regex to define custom format with capture groups:
{baseDir}/analyze.sh app.log --format custom --regex '\[(.*?)\] (\w+): (.*)'
Output Examples
Summary
Log Analysis Summary: app.log
================================
Total lines: 10,000
Date range: 2024-01-01 to 2024-01-02
Log levels:
INFO: 8,500 (85%)
WARNING: 1,000 (10%)
ERROR: 500 (5%)
Top errors:
Connection refused: 200
Timeout: 150
Not found: 150
Error Analysis
ERROR [2024-01-01 10:23:45] Connection refused to database
at Database.connect (db.js:45)
at Application.start (app.js:23)
ERROR [2024-01-01 10:24:01] Failed to process request
...
Statistics (JSON)
{
"file": "app.log",
"total_lines": 10000,
"date_range": {
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-02T00:00:00Z"
},
"levels": {
"INFO": 8500,
"WARNING": 1000,
"ERROR": 500
},
"top_errors": [
{"message": "Connection refused", "count": 200},
{"message": "Timeout", "count": 150}
]
}
Timeline
00:00 ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 500
04:00 ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 400
08:00 ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 700
12:00 ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 300
16:00 ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 600
20:00 ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 250
Examples
Quick summary:
{baseDir}/analyze.sh /var/log/app.log --summary
Find all errors:
{baseDir}/analyze.sh app.log --errors
Count log levels:
{baseDir}/analyze.sh app.log --count-by level
Top 10 IPs:
{baseDir}/analyze.sh access.log --top 10 ip
Last hour of errors:
{baseDir}/analyze.sh app.log --errors --last 1h
Extract JSON field:
{baseDir}/analyze.sh app.log --format json --unique userId
Custom pattern:
{baseDir}/analyze.sh app.log --pattern "user:\s*(\d+)" --count
Notes
- Auto-detects common log formats
- Handles both compressed (.gz) and uncompressed files
- Can process multiple files with wildcards
- Memory-efficient for large files (streaming)
- Supports date filtering for most formats
Weekly Installs
3
Repository
winsorllc/upgra…carnivalFirst Seen
13 days ago
Security Audits
Installed on
opencode3
gemini-cli3
claude-code3
github-copilot3
codex3
kimi-cli3