Two runs of the same job never diff cleanly — every line has a different timestamp. The sample below is preloaded with an ignore pattern that strips timestamps and durations before comparing, so the only lines flagged are the ones that actually changed: a checkout that started failing.
Diff yesterday's log against today's and every single line is "changed" — because every line carries a timestamp. The signal you actually want (a status code that flipped, a new error line, a config value that moved) drowns in thousands of lines of clock noise. The Ignore pattern box above fixes that: it takes a JavaScript regular expression, and lines are compared after removing everything it matches. Two lines that differ only inside the ignored parts count as identical and collapse out of the way. In the sample, six of seven lines match once timestamps and durations are stripped — what's left is the real story: a checkout request that went from 201 in 88 ms to 500 in 2.1 s, plus the new error line explaining why.
The ⏱ timestamps button fills in a pattern that matches ISO datetimes (2026-07-27T06:12:01.114Z), syslog dates (Jul 27 06:12:01), Apache/nginx access-log dates, plain HH:MM:SS times, fractional seconds and timezone offsets. It's a starting point, not a rule: the box takes any regex, so extend it with alternatives for whatever else churns between runs — |id=\w+ for request IDs, |\d+ms for durations, |\[thread-\d+\] for thread names, |0x[0-9a-f]+ for addresses. The sample page loads with the durations alternative already added, which is why 41ms vs 44ms stays quiet.
Three things worth knowing. First, the displayed text is always the original — matches are removed for comparison only, never from what you read. Second, Copy patch deliberately exports the complete, unfiltered diff (timestamp changes included): a patch that silently dropped differences would be a lie, so the ignore pattern affects the view, not the export. Third, if the regex is invalid you'll see a note in the stats line and the comparison simply runs without it — nothing breaks mid-typing.
Production logs carry internal hostnames, user IDs, sometimes tokens that shouldn't be in logs but are. Nothing here is uploaded: the page is static and the whole comparison runs in your browser, offline once loaded. For comparing environment configs the same way, see config files; for structured JSON logs, the JSON diff normalizes formatting first.