Your store's logs are text files on a server that no longer exists
Magento writes its logs as free text into files on a container that will be replaced. Structured Logging sends the same records to standard output as JSON, ECS, Datadog, GELF or logfmt, so the collector you already pay for can index them.
ExtensionA store runs in containers now. That was the right decision for everything
except one thing nobody thought about at the time: the logs. An order fails at
two in the morning, someone looks the next day, and the trail is a line of free
text inside var/log/system.log on a container that has since been replaced
three times. There is nothing to search, because there is nothing left. And
even when the file survives, the line is prose - a timestamp, a level and a
sentence - so finding one customer's failed checkout means reading, not
querying.
Adobe Commerce and Magento Open Source write their logs the way a single server expects: a handful of files, free text, on local disk. The platform's own logging is otherwise sound. Monolog is in there, the channels are separated sensibly, exceptions are split off into their own file. What is missing is the part every log platform built in the last decade assumes: that a record leaves the process as structured data, on a stream, with fields.
What it is for
Structured Logging takes over the destination and the shape of the records the
platform already writes. It adds no logging of its own and asks no extension to
change a single call. Disabled - which is how it ships - it is invisible:
system.log, the exception.log split, the debug gate and the payment,
shipping and cron channel files behave exactly as they do without it. Enabled,
each record leaves as one structured line, on standard output, on standard
output and standard error split by severity, or into the same files as before.
The formats are the ones log platforms parse with no translation layer in front: compact JSON, Elastic Common Schema for Elasticsearch and OpenSearch, Logstash, RFC 5424 syslog, Google Cloud Logging, Datadog with its reserved attributes, GELF for Graylog, logfmt for Grafana Loki, Monolog's own JSON, the stock line format, and a template a merchant writes themselves. Eleven in all, and adding a twelfth from another extension is one class and one line of configuration.
What changes in the week: a failure is a query. Every line carries a request
id - taken from the X-Request-Id header the load balancer already sets, or
generated once per process, which covers cron and command-line work too - so
one customer's failing checkout is one search across every line it produced.
Exceptions arrive as typed objects with class, code, message and a bounded
stack trace, rather than folded into a message string. Service, environment and
version sit on every JSON line and can be locked per environment in the
deployment file, so staging and production cannot quietly report as each other.
How it can be used
A containerised store with a log platform already paid for. Turn it on, pick the format the collector parses natively, fill in service, environment and version. The collector beside the store does the shipping; the extension ships nothing anywhere and has no transport of its own. This is the case it was built for, and the trade-off is that a merchant with no collector gains nothing.
A managed cloud runtime. On Google Cloud Run or GKE, the Google Cloud Logging format is parsed natively from standard output and a record carrying an exception also reaches Error Reporting. On AWS ECS the compact JSON format adds the task identifier automatically, and only there - on any other host the field is left out rather than filled with a placeholder.
A server that must keep its files. Some operations teams have logrotate, a file-tailing agent and a decade of habit, and moving the files is not on the table. Keep the file destination and change only the format: the same paths, the same rotation, structured contents. The trade-off is that the container problem stays unsolved, because it was never the problem being solved.
A deployment that must not let developers change it. Every setting can be
locked in app/etc/env.php, which beats the database, is read before the
database is even reachable, and renders the field read-only in the admin. A
release pipeline sets it; nobody clicks it off.
How it compares
Measured on 2026-08-31 by reading five live listings on the Marketplace.
The area is small and it splits in two. Log viewers - iCodeBees' Logs
Viewer Download & Clear, iFlair's Admin Log Viewer, MageComp's Log Downloads at
USD 149.00 - put a grid over var/log so an administrator can read, download
or clear the files without shell access. Log housekeeping - ExtMag's Logs
Manager Pro, USD 149.00 for the first year and 79.00 a year after - caps file
sizes and archives what grows past them. Two of the three viewers are free.
Both halves are about the files. Neither changes what a record looks like or
where it goes, which is the whole of what this extension does. That is the
honest comparison: not that the alternatives are worse at this, but that
nothing on the Marketplace does it, and the merchant's current option is to
write a di.xml override against Magento's handler chain themselves - which
works, and is exactly the maintenance this removes.
Where the alternatives are genuinely better: if what a merchant needs is to
read the logs from the admin panel without a shell, a viewer does that and
this extension does not - it has no grid, no reader, no admin page beyond its
configuration section. If the need is that var/log stopped filling the disk,
Logs Manager Pro's rotation is the direct answer and cheaper in effort than
routing everything to a collector. And two of those viewers cost nothing.
The one thing here with no counterpart anywhere in the category is the
coverage report. bin/magento webramos:structured-logging:inspect lists every
logger the installation has configured, shows where each one's records go, and
flags any log still writing its own file or any record being written twice. It
can measure var/log around a marker record to prove it rather than infer it,
and it refuses to run that probe while the extension is disabled, because the
markers would land in the real files. A merchant can therefore check that
nothing is quietly missing before trusting the arrangement, which is not a
claim a listing can make for them.
What it does not try to be
It is not a log viewer, not an audit trail of who changed what, not an alerting system, and not a transport - there is no batching, no push exporter and no OTLP. It stores nothing, adds no database table, and sends nothing off-site. The rest of the absences are in the FAQ on the extension's page, stated as facts.