fkeloks/ibexa-logs-ui
Ibexa Logs UI adds a lightweight back-office dashboard for browsing and inspecting application log files. View available logs, filter entries, and review details directly in Ibexa, helping administrators locate errors and troubleshoot issues faster without SSH or direct server access.
This is a small, single-author Ibexa bundle (last release September 2022, zero stars, zero dependents) that adds a UI for browsing Ibexa/Symfony log files. Treat it as "read the source before you trust it," not as a drop-in vendor dependency.
Minimal path:
composer.json constraints against your Ibexa version and PHP version. With no releases since 2022 it likely targets Ibexa 4.x / PHP 8.0–8.1; on newer stacks expect at least a composer why-not conversation.vendor/fkeloks/ibexa-logs-ui/ and look at, in order:
src/*Bundle.php) — namespace tells you what to register,Resources/config/ (routing, services, default_settings.yaml if present),src/Controller/ — the route path, the log directory it reads, and whether it takes a filename from the request,Resources/views/ — how it renders, and whether it uses Ibexa's admin design system.config/bundles.php, and import its routing if the bundle doesn't autoload it (most Ibexa bundles require an explicit entry in config/routes/ or config/routes/ibexa.yaml).bin/console cache:clear && bin/console debug:router | grep -i log.First real use case: give support staff and editors a read-only, in-admin view of var/log/prod.log (or a dedicated support Monolog channel) so they can self-diagnose "why didn't my content publish" without shell access or a separate log stack. It is a convenience tool, not an observability platform.
Standard bundle wiring. The common Ibexa pattern is: register the bundle, import routing, and let the bundle's own controller serve the page. Expect an admin-menu entry or a route you link to manually. If there's no menu item, add one via an admin menu listener rather than hardcoding links into templates.
Access control is your job, not the bundle's. In practice you want to gate this behind either:
logs / read) checked in a controller listener, oraccess_control rule + role, e.g. only ROLE_ADMIN or a dedicated ROLE_SUPPORT.Whichever route you take, verify with a non-admin user before shipping. A log viewer that leaks stack traces and request payloads to editors is a security incident waiting to happen.
Channel-per-concern. The bundle is only as useful as your Monolog config. Split into named channels/files (prod.log, support.log, payments.log) so the UI's file picker maps to something meaningful. A single 500 MB prod.log makes any file-based viewer painful.
Environment scoping. The clean pattern is: install in require-dev or enable the bundle conditionally in config/bundles.php for dev/staging only, and only ever enable in production behind a hard allowlist (VPN/internal IP check via a kernel request listener). Support tooling in prod is fine; open support tooling in prod is not.
Template override instead of forking. If you need branding or to hide the file picker, override the bundle's Twig templates using standard bundle inheritance (templates/bundles/FkeloksLogsUiBundle/...) rather than editing vendor code. That keeps you upgradeable if the package ever revives.
Pair it with a read-only log path. Point the bundle at a directory your web user (www-data) can read but not write, and make sure your deploy pipeline sets those permissions — otherwise the UI renders an empty list and you'll spend an hour debugging the bundle instead of chmod.
composer.json, commit the lock file, and be prepared to fork or vendor-patch. Budget an hour to audit the controller for path traversal (../ in a filename parameter) before exposing it anywhere.sudo -u www-data head -n1 var/log/prod.log.logrotate renames and recreates files; a viewer holding an open handle or caching a file list will show stale or truncated content. If the bundle caches the listing, expect to refresh after rotation.cache:clear throws a service-definition error, check debug:container for the failing service and whether a deprecated argument signature is the cause.debug:router shows nothing, the routing file wasn't imported. Add it explicitly to config/routes.yaml under the bundle's prefix.debug:router (route exists?) → debug:container (services wired?) → firewall/access_control (403?) → filesystem permissions (empty list?) → log format (content unparseable?).How can I help you explore Laravel packages today?