Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Http Logger Laravel Package

dragon-code/laravel-http-logger

A Laravel package that automatically logs incoming HTTP requests and responses, capturing method, URL, status code, headers, and payloads for easier debugging, auditing, and monitoring of your application's traffic.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. The package remains a conventional Laravel middleware + service provider + publishable config that writes incoming request data through the Log facade into configured Monolog channels. It composes naturally with existing channel configuration (single, daily, stderr for containers, or a dedicated http channel) and slots into a standard HTTP kernel. The architectural caveat is also unchanged: it is duplicative — roughly 40–60 lines of first-party middleware achieves the same outcome, and it overlaps with Telescope, Laravel's request context, and APM tooling (Sentry, Datadog, New Relic). Its value is config-driven field selection and fast time-to-value, not unique capability.

Integration feasibility. Improved from low-to-moderate to moderate for production. The 1.6.0 release adds Laravel 13 compatibility, which materially changes the dependency calculus: the Composer constraint now spans the framework version we run and the next major, so the integration is no longer immediately pinned to an end-of-life matrix. Install, auto-discovery, vendor:publish, and middleware registration remain an under-an-hour developer experience.

The blocker narrows rather than disappears. The repository has been reported as archived, yet this release contains a human-authored merged PR (#28, Laravel 13 compatibility, by @andrey-helldar) alongside three bot commits (license year, preview, banner). That is contradictory signal and must be resolved before adoption: either the archive was lifted, or the maintainer is still cherry-picking merges into an archived repo. Feasible paths remain (a) fork and maintain internally, (b) vendor the source, (c) reimplement — but the urgency of choosing (a) drops, since a supported path now extends through Laravel 13.

Technical risk. The dominant risks are structural and were not addressed by 1.6.0. The release is a single compatibility patch plus housekeeping; there are no security fixes, no redaction features, no sampling controls, no Octane-safety statement, and no structured-output change.

  • Abandonment risk (downgraded high → medium-high). The Laravel 13 patch buys one major cycle and demonstrates the maintainer will still accept external compatibility work. It does not constitute a support commitment: 31 stars, 0 dependents, no CVE pipeline, no issue triage guarantee. The practical effect is that the decision deadline moves from "now" to "before Laravel 14," not that the risk is retired.
  • Data exposure risk (high, unchanged). HTTP request logging inherently captures headers (Authorization, Cookie), query strings, and potentially bodies. Nothing in 1.6.0 adds verified masking or allow-listing. This remains a PII/PCI finding and a compliance incident waiting to happen, especially with a third-party aggregator sink.
  • Availability risk (medium, unchanged). Synchronous logging in the request path, with no evidence that writer exceptions are swallowed. Disk-fill and log-amplification remain realistic.
  • Integrity risk (medium, unchanged). User-controlled headers and URLs written verbatim enable log injection into line-oriented sinks.
  • Supply-chain risk (low-medium, unchanged). Single-maintainer, low-traffic package; dependency surface should be audited before pinning. A new human contributor on the compat PR slightly improves the bus factor and gives us a knowledgeable contact for a fork handover.
  • Version signal ambiguity (resolved). The prior open question — whether the last tag was a genuine compatibility release or an automated abandonment artifact — is answered for 1.6.0: it is a real, human-contributed Laravel 13 compatibility change. The remaining verification is whether the project's CI actually exercises L13 or the version constraint was merely widened.

Key questions for the maintainer/sponsor.

  1. Which PHP/Laravel versions does the final tag support? Partially answered: Laravel 13 claimed. Confirm the tested PHP 8.x range and whether CI runs the L13 matrix or only the constraint was relaxed.
  2. Open: Is the repository still archived, and does the maintainer intend further releases (security or otherwise), or is 1.6.0 a terminal compatibility courtesy?
  3. Does it log request bodies and all headers by default, and is there first-class redaction/allow-listing, or must we implement it? (Unchanged — no redaction work in 1.6.0.)
  4. Is logging synchronous in the request lifecycle, and are writer failures caught and swallowed? (Unchanged.)
  5. Does it support sampling, per-route exclusions, and structured JSON output? (Unchanged.)
  6. Is it Octane-safe? (Unchanged — no stated fix or test.)
  7. Who internally owns the fork, and what is the upgrade trigger? Revised trigger: Laravel 14, not the next major.
  8. Do we already have this covered via Telescope/APM/custom middleware such that value is near zero?

Verdict: still a tactical borrowing of a pattern rather than a strategic dependency, but 1.6.0 removes the immediate forcing function. Acceptable to composer require behind our own adapter for the Laravel 13 cycle only if redaction, sampling, exclusions, and a named fork owner are in place; the fork-or-reimplement decision can be deferred to the Laravel 14 upgrade rather than made at adoption. Do not read the release as evidence of ongoing support — three of four changes are bot housekeeping.

Integration Approach

Stack fit. Unchanged and now wider: a Laravel 9–13 monolith or API wanting a config-driven request log without building middleware. It slots as one middleware in the web/api groups and writes to any configured channel — stderr for containerized deployments feeding a log shipper, or a dedicated http channel with daily rotation for VM/bare-metal. Complementary to APM, not a substitute: APM gives traces and latency, this gives durable request records.

Migration path. Simplification versus the prior assessment: a fork-per-release is no longer mandatory up front. Recommended path is adapter-first, fork-on-trigger:

  • Greenfield logging: integrate upstream 1.6.0 pinned to an exact version, wrapped in our own RequestLogMiddleware, with the fork created lazily — the trigger being Laravel 14 or any CVE/security report.
  • Replacing existing custom middleware or Telescope-based request capture: run both in parallel in staging, diff the emitted fields, then retire the incumbent only after the new output is validated against the log schema and retention policy.

Indirection is still the critical mechanic: keep the package's public surface small and depend on our wrapper, not the vendor namespace. That makes eventual replacement, forking, or reimplementation a config change rather than a refactor — and it lets us defer the fork decision without accruing integration debt. If we do fork, consume via a VCS repository entry in composer.json (or a private Packagist/Satis).

Compatibility. Verify the full matrix rather than trusting the release note: minimum and maximum supported PHP, the exact Laravel minor in production, and the presence of Octane, Horizon, or other long-running workers. The L13 claim deserves a specific check — confirm the package's test suite genuinely runs against Laravel 13 (and PHP 8.3/8.4), because a widened constraint without a green matrix converts a loud resolution failure into a silent runtime failure. Octane testing remains mandatory — middleware retaining state on a singleton bleeds request data across workers, a correctness and data-leak issue. Also confirm behavior under APP_DEBUG, queue workers, and health-check routes (exclude those from logging to avoid noise and cost).

Sequencing (roughly 2–3 weeks elapsed, ~1 week of engineering — unchanged).

  1. Spike (1–2 days). Install 1.6.0 in a scratch branch, enable on a non-production route group, inspect emitted payloads for headers/bodies/PII.
  2. Archive/CI verification (0.5 day, can run inside the spike). Determine whether the repo is still archived, whether the maintainer will take future patches, and whether CI covers Laravel 13. This single check sets the fork trigger date.
  3. Risk review (1–2 days, parallel). Security and privacy sign-off on field allow-list and redaction; confirm retention and sink residency requirements.
  4. Integrate behind adapter (2–3 days). Own middleware wrapper, config as code, route exclusions, sampling.
  5. Measure (2–3 days). Benchmark p50/p95 latency delta and log volume per 1k requests in staging; size storage and cost.
  6. Canary rollout. Enable on one service or 10% of traffic, watch error rate and disk/log ingestion, then widen.
  7. Document (1 day). Runbook covering ownership, the fork-or-reimplement trigger (Laravel 14), upgrade procedure, redaction rules, and rollback.

Operational Impact

Maintenance. The change here is scheduling, not magnitude. Archiving — if still in effect — continues to shift lifecycle cost in-house, but 1.6.0 defers the first forced engagement from the upcoming framework upgrade to the next one. Realistic budget remains 2–5 engineer-days per year in steady state, spiking to 1–2 weeks at each Laravel major; the difference is that we can now plan that spike rather than absorb it at adoption. Assign a named owner at adoption time regardless — an unowned dependency on an archived package is still a slow-motion outage, and an unowned fork of one is worse. A decision is owed by the Laravel 14 beta, whichever direction we choose.

Support. No upstream support, no issue triage commitment, no CVE pipeline — one human contributor merged one patch, which is goodwill rather than a support contract. Internal escalation only, so an SME must exist. Treat the source as the documentation; it remains small enough to read in an afternoon, which is the main reason the fork option stays cheap.

Scaling. Unchanged. Cost scales linearly with request volume and payload size — the wrong shape for high-RPS services. Mitigations: restrict to non-health, non-static routes; cap body capture length; sample (5–10% of successful requests, 100% of 4xx/5xx — errors are where the value is); ship via stderr to a managed aggregator rather than local disk; define retention up front (30 days is usually generous). At meaningful volume the storage and ingestion bill, not CPU, is the dominant cost — model it before rollout.

Failure modes to instrument for.

  • Request-path coupling: logger throws → 500s. Wrap writes in try/catch or push to a queue, accepting that queued logging loses records on hard failure.
  • Disk/ingestion exhaustion: unbounded body logging or a traffic spike saturates the volume and takes the app down with it. Alert on filesystem and ingestion quota.
  • PII leakage: highest severity because it is silent, permanent (logs get copied and indexed), and a compliance event. Allow-list fields; never log Authorization, Cookie, or raw bodies by default. Nothing in 1.6.0 mitigates this — it is entirely our control.
  • Log injection: sanitize CR/LF in user-controlled values before writing to line-oriented sinks.
  • Silent misconfiguration: middleware unregistered, wrong channel, or sampling at zero — indistinguishable from "no traffic." Emit a startup/heartbeat check.
  • Upgrade breakage: framework major bumps fail at boot with no upstream fix. Partially mitigated for L13 by this release; recurred at L14. Covered long-term only by the eventual fork's CI matrix.

Ramp-up. Unchanged and low: publish config, register middleware, read the config file. Half a day to first useful output, one to two days to production-grade with redaction, exclusions, and sampling. The learning curve is not the package — it is the ownership model. Document the fork trigger alongside the integration so the next engineer inherits a plan rather than a surprise.

Bottom line. 1.6.0 is a genuine but narrow improvement: it converts an immediate dependency dead-end into a two-major-cycle runway and resolves the "is this tag real?" ambiguity. It does not touch any of the compliance, sampling, or availability concerns, and three of its four changes are bot housekeeping — read it as a courtesy compatibility patch, not a revival. Adopt upstream 1.6.0 behind our own middleware adapter with redaction, sampling, and route exclusions configured before the first production byte, schedule the fork-or-reimplement decision for the Laravel 14 upgrade, and keep the ~50-line reimplementation as a live fallback rather than a hypothetical one.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource