⭐ Found this useful? Give it a star on GitHub! It helps us maintain and improve the project.
Symfony bundle that intercepts HTTP requests and responses, stores them with configurable body policies by content type, redaction, and a secured admin UI with filter, export (CSV/JSON), and purge/retention — with optional Messenger async persistence.
📋 Compatible with Symfony 7.4+ and 8.x (PHP 8.2+)
This bundle is FrankenPHP worker mode friendly (including without kernel reset between requests — see FRANKENPHP-WORKER-AUDIT.md).
Captured traffic — filters, status badges, export and purge |
Entry detail — redacted headers and JSON bodies |
Delete through the UiKit confirm dialog |
Http Log Bundle captures each HTTP exchange on kernel terminate, classifies response bodies (html, json, soap, xml, text, binary, other), applies redaction rules, and persists to Doctrine. Operators browse logs at /admin/http-log, export filtered results, and purge by retention policy.
- ✅ Kernel subscriber capture with sampling, environment filter, and sub-request toggle
- ✅ Body policy by content type with
max_body_bytestruncation - ✅ Redaction for headers, query parameters, and JSON paths
- ✅ Doctrine entity
HttpLogEntrywith indexes for filter queries - ✅ Secured admin UI (filter, detail, export, purge) — REQ-UI-002
- ✅ Admin pages on the UiKit 2.1 page contract (REQ-UI-003): list / show scaffolds, themed once through
nowo_ui_kit.theme(TEMPLATES, USAGE) - ✅ CLI:
nowo:http-log:export,nowo:http-log:purge - ✅ Messenger async: persist, export, purge handlers
- ✅ Ignore routes (
fnmatch) and path prefixes (admin UI excluded by default) - ✅ Symfony Flex recipe and FrankenPHP demo (
demo/symfony8) - ✅ GitHub Spec Kit baseline and 100% coverage target on
src/
composer require nowo-tech/http-log-bundle# config/packages/nowo_http_log.yaml
nowo_http_log:
capture:
response_body_by_type:
json: true
security:
access_roles:
- ROLE_ADMINphp bin/console doctrine:schema:update --force
# Configure symfony/messenger when async: true (default)Admin UI: /admin/http-log (requires ROLE_ADMIN by default).
make up
make test
make -C demo/symfony8 up
make demo-smoke
make -C demo/symfony8 test-e2e # Playwright e2e (REQ-DEMO-013)
make -C demo/symfony8 demo-screenshots # refresh docs/images/demo/*.webp- Installation
- Configuration
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
- PSR evaluation (REQ-CS-007)
- Templates (page contract)
- GitHub Actions CI requirements
- Demo with FrankenPHP
- FrankenPHP worker audit
| Language | Coverage (approx.) | Command |
|---|---|---|
| PHP | 100% on src/ (make test-coverage) |
make test-coverage |
make test
make test-coverage
make test-coverage-100
make release-checkRun make test-coverage after cloning to refresh the coverage badge and CI threshold (target: 100% on src/).
MIT — see LICENSE.



