Help us improve
Share bugs, ideas, or general feedback.
From acc
Discovers and prioritizes log files in PHP projects using glob patterns for Laravel, Symfony, CodeIgniter, Yii, PHP-FPM, Docker, CI/CD, and more. Parses configs for custom paths.
npx claudepluginhub dykyi-roman/awesome-claude-code --plugin accHow this skill is triggered — by the user, by Claude, or both
Slash command
/acc:discover-project-logsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Discovers and prioritizes log files across PHP project ecosystems. Provides Glob/Grep patterns for auto-detection, parses framework configs for custom paths, and scores results by relevance.
Parses and analyzes PHP application logs in PSR-3/Monolog, Laravel, Symfony, and plain error_log formats. Extracts exceptions, stack traces, request context, error frequency, and correlates related errors.
Guides log analysis with grep filters, bash pipelines, iterative refinement, and utility scripts to debug errors, incidents, and patterns efficiently.
Searches and analyzes logifai-captured development logs in NDJSON format using Read, Grep, Glob, Bash. Debugs errors, runtime issues, reviews activity via keywords, timestamps, stack traces, logifai:// URIs.
Share bugs, ideas, or general feedback.
Discovers and prioritizes log files across PHP project ecosystems. Provides Glob/Grep patterns for auto-detection, parses framework configs for custom paths, and scores results by relevance.
Step 1: Auto-discover — Glob/Grep by known framework paths
Step 2: Config-based — Parse framework config files for custom log paths
Step 3: Ask user — If nothing found, report back to coordinator for user interaction
Important: Specialist agents (bug-hunter, ci-debugger, etc.) do NOT have AskUserQuestion tool. If no logs found, the agent must report "No logs found automatically" back to the coordinator. The coordinator (command-level, opus model) handles user interaction via AskUserQuestion.
Question: "Log files not found automatically. Where are your project logs?"
Options:
- "storage/logs/" (Laravel)
- "var/log/" (Symfony)
- "writable/logs/" (CodeIgniter 4)
- "runtime/logs/" (Yii2/Yii3)
[+ Other for custom path]
Glob patterns:
storage/logs/*.log
storage/logs/laravel.log
storage/logs/laravel-*.log
Config file: config/logging.php
Extract: 'path' => env('LOG_PATH', storage_path('logs/laravel.log'))
Config parsing:
Grep pattern: /'path'\s*=>\s*(.+)/
File: config/logging.php
Look for: channels → single/daily → path value
Also check: LOG_CHANNEL in .env for active channel
Glob patterns:
var/log/*.log
var/log/dev.log
var/log/prod.log
var/log/test.log
Config file: config/packages/monolog.yaml (or monolog.php)
Extract: path: '%kernel.logs_dir%/%kernel.environment%.log'
Config parsing:
Grep pattern: /path:\s*['"]?(.+?)['"]?$/
File: config/packages/monolog.yaml
Look for: handlers → main → path
Default: var/log/{environment}.log
CI3:
application/logs/*.log
application/logs/log-*.php
CI4:
writable/logs/*.log
writable/logs/log-*.log
Config file (CI4): app/Config/Logger.php
Extract: public string $path = WRITEPATH . 'logs/'
Config parsing:
Grep pattern: /\$path\s*=\s*(.+);/
File: app/Config/Logger.php
Default: writable/logs/
Glob patterns:
runtime/logs/*.log
runtime/logs/app.log
Config file: config/web.php (or config/main.php)
Extract: 'log' component → targets → FileTarget → logFile
Config parsing:
Grep pattern: /'logFile'\s*=>\s*(.+)/
File: config/web.php, config/main.php, common/config/main.php
Look for: 'components' → 'log' → 'targets' → class FileTarget
Default: @runtime/logs/app.log
Glob patterns:
runtime/logs/*.log
runtime/logs/app.log
Config: di-config (config/common/di/logger.php or similar)
Extract: LogTarget configuration, FileRotator paths
Config parsing:
Grep pattern: /FileRotator|FileTarget|->logFile/
Files: config/common/di/*.php, config/params.php
Default: runtime/logs/
Glob patterns:
logs/*.log
log/*.log
*.log (root only — limit to top-level, exclude vendor/)
tmp/logs/*.log
data/logs/*.log
Config detection:
Grep: /slowlog\s*=\s*(.+)/ in /usr/local/etc/php-fpm.d/*.conf
Grep: /error_log\s*=\s*(.+)/ in /usr/local/etc/php-fpm.d/*.conf
Grep: /php_admin_value\[error_log\]/ in php-fpm pool configs
Common paths:
/var/log/php-fpm/*.log
/var/log/php-fpm/error.log
/var/log/php-fpm/slow.log
/var/log/php-fpm/www-error.log
/var/log/php8.4-fpm.log
Detection:
# Running containers
docker compose logs --tail=100 [service] 2>/dev/null
docker logs --tail=100 [container] 2>/dev/null
# Mounted log volumes
Grep: /volumes:/ in docker-compose*.yml
Look for: ./logs:/var/log or similar volume mounts
# Inside containers
/var/log/nginx/*.log
/var/log/php-fpm/*.log
/proc/1/fd/1 (stdout), /proc/1/fd/2 (stderr)
Glob patterns:
build/logs/*.log
build/logs/*.xml
build/logs/clover.xml
build/logs/junit.xml
build/reports/*.xml
build/reports/*.html
var/phpstan/*.json
.phpunit.result.cache
PHPUnit output:
Grep: /outputFile|logfile/ in phpunit.xml*
build/logs/phpunit.log
build/logs/testdox.txt
PHPStan output:
Grep: /reportUnmatchedIgnoredErrors|tmpDir/ in phpstan.neon*
Nginx:
/var/log/nginx/access.log
/var/log/nginx/error.log
docker/nginx/logs/*.log
Apache:
/var/log/apache2/error.log
/var/log/httpd/error_log
MySQL slow query log:
Grep: /slow_query_log_file/ in my.cnf, docker-compose*.yml
/var/log/mysql/slow-query.log
/var/lib/mysql/*-slow.log
PostgreSQL:
Grep: /log_directory|logging_collector/ in postgresql.conf
/var/log/postgresql/*.log
pg_log/*.log
Run these Glob patterns in order of priority:
# Priority 1: Framework logs (most likely useful)
storage/logs/*.log # Laravel
var/log/*.log # Symfony
writable/logs/*.log # CodeIgniter 4
runtime/logs/*.log # Yii2/Yii3
application/logs/*.log # CodeIgniter 3
# Priority 2: Generic logs
logs/*.log
log/*.log
# Priority 3: Build/CI artifacts
build/logs/*
build/reports/*
# Priority 4: Infrastructure (if Docker context)
docker/*/logs/*
If quick scan finds nothing:
# Step 1: Detect framework
Grep: /laravel\/framework/ in composer.json → Laravel
Grep: /symfony\/framework-bundle/ in composer.json → Symfony
Grep: /codeigniter4\/framework/ in composer.json → CodeIgniter 4
Grep: /yiisoft\/yii2/ in composer.json → Yii2
Grep: /yiisoft\/yii-/ in composer.json → Yii3 (multiple yiisoft/* packages)
# Step 2: Parse framework config for log path
[Use framework-specific config parsing from above]
# Step 3: Check .env for log overrides
Grep: /LOG_CHANNEL|LOG_PATH|LOG_DIR|APP_LOG/ in .env, .env.example
Sort discovered logs by score (higher = more relevant):
| Factor | Score |
|---|---|
| Modified in last 1 hour | +50 |
| Modified in last 24 hours | +30 |
| Modified in last 7 days | +10 |
| Contains "error" or "exception" in name | +20 |
| Framework main log (laravel.log, dev.log) | +15 |
| Slow query / slow log | +15 |
| File size > 0 bytes | +10 |
| File size > 1MB (may have useful data) | +5 |
| Generic name (app.log) | +5 |
Reading strategy for large files:
Read tool with offset to end)## Discovered Log Files
| # | Path | Framework | Type | Size | Modified | Score |
|---|------|-----------|------|------|----------|-------|
| 1 | storage/logs/laravel.log | Laravel | App | 245KB | 2 min ago | 95 |
| 2 | storage/logs/laravel-2025-01-15.log | Laravel | App (daily) | 1.2MB | 1 hour ago | 80 |
| 3 | var/log/nginx/error.log | - | Web server | 12KB | 5 min ago | 70 |
| 4 | build/logs/phpunit.log | - | CI/Test | 34KB | 2 days ago | 25 |
**Discovery method:** Auto-detect (Laravel detected via composer.json)
**Config path:** config/logging.php → channel: daily
**Recommended:** Start with #1 (highest score, most recent errors)
Read, Grep, Glob tools available to all agentsBash tool is needed (docker compose logs)