Every stop along the way
This is the part no amount of reading the code will give you. Your repo says
what can run. The log says what did — in order, with the
handler that called it and the record it ran against, so you can filter to
one trigger, one class or one object and watch the rest fall away.
Excerpt of a trace, inside a trigger
| Kind | Class | Method | Object | ms |
| Trigger | — | — | OrderItem | 178.6 |
| Method | TriggerRouter | Run(IHandler) | OrderItem | 176.7 |
| Method | OrderItemHandler | IsDisabled() | OrderItem | 62.4 |
| Method | HandlerSettings | findRelatedSettings(Id, Id) | OrderItem | 59.8 |
| Workflow | — | Recalculate Order Total ×4 | OrderItem | |
Real timings, real shape, from a production log — the class names are
invented, because the originals belonged to somebody’s org. Two things fall
out of it that no amount of reading the code would: a third of the trigger’s
runtime goes on IsDisabled(), checking whether it should run at
all, and a workflow rule fired four times on the way past. Nobody debugging
that trigger was looking at a workflow rule.
A diagnosis, not a data dump
A debug log will happily tell you 168,000 things. Almost none of them matter.
Underneath the summary you get the shortlist.
Example ranked findings from a debug log
| Severity | Finding | Where |
| CRITICAL |
CPU time exceeded: 30,064 of 25,000 (120%) |
namespace (default) |
| ERROR |
System.LimitException: Apex CPU time limit exceeded |
findRelatedSettings, Apex line 22 — 5 occurrences |
| WARN |
10.40 s unlogged gap (60% of transaction) |
between SOQL_EXECUTE_END and DML_BEGIN |
| WARN |
Log is incomplete — Salesforce discarded 35.8 MB |
Timings across the skip are unreliable |
| INFO |
104.5 s self time in updateChildRecords |
25 calls · 125 s total · 25 DML — DML inside a loop |
And it says so out loud
The log already knows all of this. It just won't say it in a sentence.
Every line is something that happened — and the expensive part is often
the gap between two of them.
What happened
10.40 s — 60% of the whole transaction — is unlogged time, between
SOQL_EXECUTE_END and DML_BEGIN.
Overall, 96% of the elapsed time has no log line explaining it.
2 updates cost 5.13 s across 5 rows; the slowest single one took
4.63 s. That span includes every trigger, flow and validation the save
set off — not just the write.
Real output from a real 25 MB production log. Those two log lines sit
next to each other in the file. I'd scrolled past them for years.
Where the project actually is
Now is what I've run against a real log in a real spreadsheet.
Next is what I'm building. Later is a wish list, and wish
lists are free.
Now
Working and verified
- The route, in order. Triggers, flows, workflow rules, validations, classes.
- Filter without re-running. By trigger, class, method, object or limit type.
- A summary in sentences. The duck goes first.
- The shortlist. Fatal errors, blown limits, unlogged gaps, hotspots — ranked.
- Honest about holes. It says when the log is incomplete.
- Scrub before you share. You choose what it keeps.
- No Drive permission. Just the sheet you opened it from.
Next
Being built now
- The Marketplace listing. Install it the normal way.
- Open a file. Instead of pasting one.
- The 101 hunt. Which query keeps running, and who calls it.
- Async hand-offs. Where the trail leaves this log.
- Name the managed package. Whose code the missing time belongs to.
Later
Wanted, not started
- Benchmarks you can keep. Find out whether the fix helped.
- Lead with the error you got. The 9am email, answered first.
- One transaction, many logs. Put a shattered journey back together.
- Before and after. Two runs, side by side.
- Enormous logs, in chunks.
🔒 Privacy Policy
Apex debug logs are among the most sensitive artefacts a Salesforce org
produces. They routinely contain names, email addresses, phone numbers,
postal addresses, whatever your code printed with System.debug, and the
shape of your internal automation.
Saasy Logs does not collect, store, transmit or receive your log
data. Parsing happens entirely inside the Google Apps Script runtime
attached to your own spreadsheet. The add-on makes no external network
requests, contains no analytics or tracking, and requests no Google Drive
permission at all — it can only see the spreadsheet you open it from.
We operate no server and hold no account for you, so no data of yours ever
reaches us. Nothing is stored, anywhere, for any length of
time — not on a server, not in a cache, not between runs. An
earlier version held your pasted text in Google's per-document cache for
six hours so that you could re-run without re-pasting; that feature has
since been removed, and the cache went with it.
Last updated 19 September 2026 · Questions: support@saasylogs.com
📄 Terms of Service
Saasy Logs is provided free of charge and as is, without warranty of
any kind. It is a diagnostic aid: it reports what a debug log
contains and flags where a log is incomplete, but it cannot guarantee that
every performance problem in your org will be surfaced, and it is not a
substitute for your own engineering judgement.
You are responsible for ensuring you have the right to process any log you
paste into it. Do not use it on data you are not permitted to handle.
Not affiliated with, endorsed by, or sponsored by Salesforce, Inc. or Google
LLC. Salesforce, Apex and related marks are trademarks of Salesforce, Inc.
Last updated 13 September 2026