A single error in the log means almost nothing
Every Magento store writes errors to disk all day. Most of them are one-off noise: a timed-out request, a bot hitting a dead URL, a transient network blip.
The signal is not any single line. It is the same error repeating hundreds of times, because that is what tells you something is actually broken.
This article shows where Magento records errors, how to rank them by frequency instead of reading top to bottom, and which recurring signatures are worth acting on.
Where Magento actually records errors
Almost everything lands in var/log. The three files that matter most are exception.log, system.log, and debug.log.
Uncaught exceptions also generate a full report under var/report/. When a customer sees an error page with a reference number, that number is the filename sitting in var/report/.
Magento logs through Monolog, so extensions can add their own channels and files. A store with several extensions often has more than the three default logs.
exception.log that is completely empty on a busy store is usually a sign that logging is misconfigured, not that nothing is failing.system.log and exception.log hold different things
The two default logs are not interchangeable, and knowing which holds what saves time. exception.log records uncaught exceptions, each with a full stack trace you can follow to a class and method.
The system.log file is the general channel. It collects warnings, notices, and informational messages that never became exceptions, including the Broken reference layout warnings and deprecation notices.
When you are chasing a hard failure, start in exception.log. When the problem is subtler, like a page rendering wrong without throwing an error, system.log is usually where the clue is.
Read the log by frequency, not by time
Reading a log chronologically tells you what happened last. It does not tell you what happens most, which is the number you actually want.
Collapse similar lines and count them. Normalizing out timestamps and numeric IDs makes the same underlying error group together:
awk -F'] ' '{print $2}' var/log/exception.log \
| sed 's/[0-9]\+/N/g' \
| sort | uniq -c | sort -rn | head -20
The top of that list is your real problem set. An error that appears twelve thousand times is a system telling you something specific, and it is almost always cheaper to fix than to keep ignoring.
The signatures that usually matter
A handful of recurring messages show up across many stores. When they dominate the frequency count, each points at a specific class of problem:
Broken referencewarnings insystem.logpoint at layout XML referencing blocks that no longer exist, often after a theme or module change.Area code not setalmost always comes from custom code or a CLI script running outside a configured area.- Repeated payment or shipping gateway timeouts point at a failing third-party integration, not at Magento itself.
- Deprecation notices and "unable to unserialize" errors usually trace to an extension written for an older Magento or PHP version.
The exact wording changes between versions. The method of finding them, ranking by count, does not.
One-off versus recurring
Not every error deserves attention. The job is to separate the background rate of transient failures from the errors that repeat on a pattern.
Here is a useful rule. An error that appears once an hour at a steady rate is a system condition, not an accident, and something is triggering it on a schedule. That something is usually a cron job, an integration poll, or one specific customer action.
The opposite mistake is dismissing an error because it looks harmless. A warning that fires ten thousand times a day is not harmless. At minimum it is filling the disk and burying the errors that matter underneath it.
From a log line back to the cause
Once you have a high-frequency signature, the stack trace in exception.log or the matching var/report/ file names the class and method. That is your starting point.
Trace the top frames of the stack to the module that owns them. A recurring error inside a Vendor\Module namespace is that extension's problem, while one deep in Magento\Framework is more often something calling the framework incorrectly.
Make the review a routine, not a fire drill
Logs are only useful if someone reads them before the incident, not during it. A short weekly pass over the frequency count catches slow-building problems while they are still cheap to fix.
A signature you have already triaged and accepted can be filtered out of the count, so next week's pass surfaces only what is new. The list stays short and the review stays fast.
Knowing which errors repeat, how often, and where they originate turns a wall of log noise into a ranked list of real defects. That ranked list is the backbone of any honest stability review.