SAASY LOGS

Salesforce debug logs, in plain English.

Paste or upload a Salesforce debug log into a Google Sheet. Saasy Logs shows the path your save actually took: every trigger, flow, validation and class, in order. Then it tells you in plain sentences what went wrong and where the time went.

Salesforce Apex debug logs, specifically — not affiliated with, endorsed by, or sponsored by Salesforce, Inc.

See how it works Read how it found 10 seconds nobody could see

Not on the Marketplace yet — email me and I'll set you up. Ask for access — and if you have a log that breaks it, send me that instead. That's how the last three bugs got found.

How it works

  1. Open a Google Sheet and start Saasy Logs from the Extensions menu.
  2. Paste the log, or upload the .log file you downloaded from Salesforce.
  3. Read the Summary. Each run adds its own tabs, so nothing already in the sheet is touched.

See it step by step on a real log →

See the path your save took

Your code says what can run. The log says what did. Saasy Logs draws it as a map: which trigger fired, what it set off, and on which object.

Example code path: the top-level steps a save went through
Code pathKindRanObject
OrderItemTriggerTrigger×2OrderItem
    OrderTriggerTrigger×2Order
    Set Order OwnerFlowonce—

Three lines, and the cascade is visible: saving an order line fired the order's trigger, which fired a flow. Nobody had to read 20,000 rows to see it.

Then what happened, in sentences

The Summary opens by saying what happened, before any table.

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.

Then a ranked shortlist

A big log holds 168,000 lines. These are the few worth your time, worst first.

Example ranked findings from a debug log
SeverityFindingWhere
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 every step, in detail

The Trace tab lists every trigger, method, flow and workflow rule that ran, with the record it ran on. Filter to one trigger, class or object.

Excerpt of a trace, inside a trigger
KindClassMethodObjectms
Trigger——OrderItem178.6
MethodTriggerRouterRun(IHandler)OrderItem176.7
MethodOrderItemHandlerIsDisabled()OrderItem62.4
MethodHandlerSettingsfindRelatedSettings(Id, Id)OrderItem59.8
Workflow—Recalculate Order Total ×4OrderItem

Real timings from a production log, class names changed. A third of the trigger's time went on IsDisabled(), checking whether it should run at all, and a workflow rule fired four times on the way past.

It finds the time nobody logged

A debug log lists things that happened. The expensive part is often the gap between two of them: seconds where nothing was logged at all. Saasy Logs measures those gaps and tells you where they sit. Read how it found 10 seconds between two lines I'd scrolled past 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 code path. Which trigger fired, what it set off, on which object.
  • 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.
  • Paste or upload. The text or the .log file, whichever you have.
  • A scrubbed copy, every run. Names and record IDs stay, values go. Ready to send.
  • Your tabs are safe. Every run adds its own tabs and overwrites nothing of yours.
  • No Drive permission. Just the sheet you opened it from.
Being built now
  • The Marketplace listing. Install it the normal way.
  • The object path. Which records the save touched, in what order.
  • 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.