
Log Analysis
- 6 installs
- 4 repo stars
- Updated June 18, 2026
- doubleslashse/claude-marketplace
Retrieve, parse, and analyze logs across infrastructure platforms to extract insights and recognize patterns.
About
Provides log parsing strategies, formats, and pattern-recognition methods for infrastructure troubleshooting. A developer uses it when analyzing platform logs to diagnose issues.
- Log parsing strategies across platforms
- Pattern recognition and insight extraction
Log Analysis by the numbers
- 6 all-time installs (skills.sh)
- Ranked #438 of 596 Debugging skills by installs in the Skillselion catalog
- Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/doubleslashse/claude-marketplace --skill log-analysisAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 6 |
|---|---|
| repo stars | ★ 4 |
| Last updated | June 18, 2026 |
| Repository | doubleslashse/claude-marketplace ↗ |
What it does
Retrieve, parse, and analyze logs across infrastructure platforms to extract insights and recognize patterns.
Files
Log Analysis Skill
Overview
This skill provides techniques for effective log parsing, analysis, and insight extraction across infrastructure platforms. It covers log formats, parsing strategies, pattern recognition, and analysis methodologies.
Log Analysis Fundamentals
Log Anatomy
Every log entry typically contains:
[TIMESTAMP] [LEVEL] [SOURCE] [MESSAGE] [CONTEXT]Key Fields:
- Timestamp: When the event occurred (critical for correlation)
- Level: Severity (DEBUG, INFO, WARN, ERROR, FATAL)
- Source: Component that generated the log
- Message: Human-readable description
- Context: Additional metadata (request ID, user ID, etc.)
Log Levels
| Level | Use | Action Required |
|---|---|---|
| FATAL | System cannot continue | Immediate |
| ERROR | Operation failed | Investigate |
| WARN | Potential problem | Monitor |
| INFO | Normal operation | None (audit) |
| DEBUG | Diagnostic detail | None (troubleshoot) |
Parsing Strategies
Structured Logs (JSON)
Most modern systems emit JSON logs:
{
"timestamp": "2024-01-15T14:30:00.123Z",
"level": "error",
"message": "Database connection failed",
"service": "api",
"request_id": "req-abc123",
"error": {
"code": "CONN_TIMEOUT",
"detail": "Connection timed out after 30000ms"
}
}Parsing approach: 1. Parse JSON structure 2. Extract standard fields 3. Flatten nested objects for analysis 4. Group by common attributes
Unstructured Logs (Plain Text)
Legacy systems often use plain text:
2024-01-15 14:30:00 ERROR [api.handler] Database connection failed: timeout after 30sParsing approach: 1. Identify timestamp format with regex 2. Extract level using keyword matching 3. Parse source from brackets/prefixes 4. Remainder is message
Mixed Format Logs
Some systems mix formats:
[14:30:00] INFO: Starting request processing {"request_id": "abc123"}Parsing approach: 1. Split structured from unstructured portions 2. Parse each portion with appropriate strategy 3. Merge results
Analysis Techniques
Time-Based Analysis
Windowing: Group events by time period
Window: 1 minute
14:30 - 14:31: 5 errors
14:31 - 14:32: 12 errors ← Spike detected
14:32 - 14:33: 3 errorsCorrelation: Match events across systems by timestamp
14:30:01.123 [API] Request received
14:30:01.125 [Auth] Token validated
14:30:01.130 [Database] Query started
14:30:01.145 [Database] Query completed
14:30:01.147 [API] Response sentPattern Recognition
Error Clustering: Group similar errors
Pattern: "Connection refused to {host}:{port}"
Instances:
- Connection refused to db-1:5432 (15 times)
- Connection refused to db-2:5432 (3 times)Anomaly Detection: Identify unusual patterns
Normal: 10-20 requests/second
Current: 500 requests/second ← AnomalyFrequency Analysis
Count by category:
| Error Type | Count | % of Total |
|---|---|---|
| Connection timeout | 45 | 60% |
| Auth failure | 20 | 27% |
| Validation error | 10 | 13% |
Trend analysis:
Hour 1: 10 errors
Hour 2: 15 errors
Hour 3: 25 errors ← Trending up
Hour 4: 50 errors ← AcceleratingRoot Cause Indicators
First occurrence: Often indicates trigger
First error: 14:30:01 - "Failed to connect to new endpoint"
Subsequent: 14:30:02+ - "Connection pool exhausted"Cascade patterns: Later errors caused by earlier ones
14:30:01 [DB] Connection failed
14:30:02 [API] Database unavailable
14:30:02 [API] Database unavailable
14:30:03 [API] Database unavailable
↑ Cascade from initial DB failureLog Retrieval Commands
Supabase
# Available services
api, postgres, auth, storage, realtime, edge-function
# MCP command
mcp__plugin_supabase_supabase__get_logs(project_id, service)GitHub Actions
# List runs
gh run list --limit 20
# Get logs
gh run view <run-id> --log
gh run view <run-id> --log-failedRailway
# Recent logs
railway logs
# Follow live
railway logs --followOutput Formatting
Summary Format
## Log Analysis Summary
**Time Range**: {START} to {END}
**Total Entries**: {COUNT}
**Error Rate**: {PCT}%
### By Level
| Level | Count | % |
|-------|-------|---|
| ERROR | 50 | 5% |
| WARN | 100 | 10% |
| INFO | 850 | 85% |
### Top Errors
1. {Error 1} - {count} occurrences
2. {Error 2} - {count} occurrences
### Timeline
{Key events in chronological order}
### Recommendations
{Based on patterns found}Detailed Format
For specific error investigation:
## Error Details: {ERROR_TYPE}
**First Seen**: {TIMESTAMP}
**Last Seen**: {TIMESTAMP}
**Occurrences**: {COUNT}
### Sample Entry{Full log entry}
### Context
{Surrounding log entries}
### Pattern
{What triggers this error}
### Impact
{What this error affects}See patterns.md for platform-specific log patterns.
Platform-Specific Log Patterns
Supabase Log Patterns
API Gateway Logs
Request Log Format:
{
"timestamp": "ISO8601",
"method": "GET|POST|PUT|DELETE|PATCH",
"path": "/rest/v1/table",
"status_code": 200,
"response_time": 45,
"request_id": "uuid",
"user_agent": "string"
}Common Patterns:
| Pattern | Meaning | Action |
|---|---|---|
status_code: 401 | Unauthorized | Check auth token |
status_code: 403 | Forbidden | Check RLS policies |
status_code: 404 | Not found | Check path/resource |
status_code: 429 | Rate limited | Reduce request rate |
status_code: 500 | Server error | Check postgres logs |
response_time > 1000 | Slow request | Check query performance |
Postgres Logs
Error Log Format:
2024-01-15 14:30:00.123 UTC [pid] LOG: statement: SELECT ...
2024-01-15 14:30:00.456 UTC [pid] ERROR: relation "table" does not exist
2024-01-15 14:30:00.789 UTC [pid] FATAL: too many connectionsCommon Patterns:
| Pattern | Meaning | Action |
|---|---|---|
ERROR: relation ... does not exist | Missing table | Check migrations |
ERROR: permission denied | Auth issue | Check RLS/grants |
ERROR: duplicate key | Constraint violation | Handle in app |
ERROR: deadlock detected | Transaction conflict | Review transactions |
FATAL: too many connections | Pool exhaustion | Scale connections |
FATAL: password authentication failed | Wrong credentials | Check secrets |
LOG: duration: Xms | Slow query logged | Optimize query |
ERROR: statement timeout | Query killed | Optimize or increase timeout |
Connection States:
-- Healthy distribution
idle: Many (connections waiting)
active: Few (executing queries)
idle in transaction: Few (should release)Warning Signs:
- High
idle in transactioncount → Connection leak - High
activewith slow queries → Query optimization needed - Approaching
max_connections→ Scale or optimize
Auth Logs
Login Event Format:
{
"timestamp": "ISO8601",
"event": "login|signup|logout|token_refresh",
"user_id": "uuid",
"provider": "email|google|github|...",
"success": true|false,
"error": "optional error message"
}Common Patterns:
| Pattern | Meaning | Action |
|---|---|---|
| Multiple failed logins | Brute force attempt | Rate limit/block |
invalid_grant | Bad refresh token | User needs to re-login |
user_not_found | Unknown email | Expected for typos |
email_not_confirmed | Unverified email | Resend confirmation |
invalid_credentials | Wrong password | Expected for typos |
| Provider errors | OAuth issue | Check provider config |
Edge Function Logs
Execution Log Format:
{
"timestamp": "ISO8601",
"function": "function-name",
"execution_id": "uuid",
"status": "success|error",
"duration_ms": 150,
"memory_used_mb": 32,
"logs": ["console output"]
}Common Patterns:
| Pattern | Meaning | Action |
|---|---|---|
status: error | Unhandled exception | Check stack trace |
High duration_ms | Slow function | Optimize code |
High memory_used_mb | Memory pressure | Optimize memory |
| Timeout errors | Exceeded limit | Optimize or split |
GitHub Actions Log Patterns
Workflow Run Logs
Run Status:
✓ completed (success)
✗ completed (failure)
○ in_progress
⊘ cancelledCommon Failure Patterns:
| Pattern | Meaning | Action |
|---|---|---|
Process completed with exit code 1 | Command failed | Check command output |
Error: Resource not accessible | Permission issue | Check token/secrets |
Error: HttpError: rate limit | API rate limited | Wait and retry |
##[error] | Step error marker | Read following message |
ENOENT: no such file | Missing file | Check paths |
npm ERR! | NPM failure | Check dependencies |
FATAL ERROR: ... JavaScript heap | OOM | Increase memory |
Timeout Patterns:
The job running on runner ... has exceeded the maximum execution timeCache Patterns:
Cache not found for input keys: ... # Cache miss
Cache restored from key: ... # Cache hitTest Failure Patterns
FAIL src/tests/example.test.ts
✕ should do something (5ms)
Expected: "expected"
Received: "actual"Common Test Patterns:
| Pattern | Meaning | Action |
|---|---|---|
FAIL | Test failed | Check assertion |
Timeout | Test too slow | Increase timeout or optimize |
Cannot find module | Import error | Check dependencies |
ReferenceError | Undefined variable | Check test setup |
Railway Log Patterns
Application Logs
Standard Output Format:
[timestamp] [level] messageHealth Check Patterns:
Health check failed: Connection refused
Health check passedDeployment Patterns:
Deploying from ...
Build started
Build completed in X seconds
Deploy started
Deploy completedCommon Patterns:
| Pattern | Meaning | Action |
|---|---|---|
ECONNREFUSED | Service unreachable | Check networking |
ETIMEDOUT | Connection timeout | Check target service |
ENOMEM | Out of memory | Increase resources |
SIGTERM | Graceful shutdown | Expected on redeploy |
SIGKILL | Forced termination | OOM or timeout |
| Port already in use | Binding issue | Check PORT env |
Build Logs
Nixpacks Patterns:
==> Building with Nixpacks
==> Installing dependencies
==> Running build commandCommon Build Failures:
| Pattern | Meaning | Action |
|---|---|---|
npm install failure | Dependency issue | Check package.json |
Build command failed | Build script error | Check build output |
No Procfile found | Missing start command | Add Procfile or railway.toml |
Log Correlation Strategies
By Request ID
Look for consistent request/correlation IDs across services:
[API] request_id=abc123 - Request started
[Auth] request_id=abc123 - Token validated
[Database] request_id=abc123 - Query executed
[API] request_id=abc123 - Response sentBy Timestamp
Match events within a tight time window:
14:30:01.100 [Service A] Event 1
14:30:01.105 [Service B] Event 2 ← ~5ms later
14:30:01.110 [Service A] Event 3 ← ~10ms after Event 1By User/Session
Track user journey:
user_id=user123 - Login
user_id=user123 - View dashboard
user_id=user123 - Submit order
user_id=user123 - Error: payment failedPattern Matching Regex
Error Extraction
# Generic error line
(?i)(error|fail|fatal|exception|crash)
# HTTP status codes
status[_:]?\s*(\d{3})
# Stack traces
at\s+[\w.]+\([^)]+\)
# Timestamps
\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}Postgres Specific
# Error messages
^ERROR:\s*(.+)$
# Duration logging
duration:\s*([\d.]+)\s*ms
# Connection info
connection.*from\s+([\d.]+)Performance Metrics
# Response times
response[_-]?time[=:]\s*([\d.]+)
# Memory usage
memory[=:]\s*([\d.]+)\s*(MB|GB|KB)
# CPU usage
cpu[=:]\s*([\d.]+)%