Somewhere in 800,000 lines are the forty that explain the outage. Search gets you to them one at a time. What you actually want is filter: the file collapsed to just the matching lines - without losing where they were, or the ability to look around them once you find the one that matters.
The Terminal answer: grep
grep -n "ERROR" app.log
grep -n -C 3 "timeout" app.log-n keeps the original line numbers and -C 3 adds three lines of context around each match - between them, most of what filtering means. Add -E for regular expressions.
The cost is that grep's output is a dead end. It's a new stream, not a view of the file: you can't widen the context around one interesting match, follow the file as it grows, or jump from a matching line back into the full log at that spot. Every refinement is another command and another scroll-back.
Filter as a view, not an extract
In Log Viewer, Filter collapses the file to the matching lines in place. The original line numbers stay, every stretch of hidden lines is drawn as an explicit break - so you always know what was left out - and an optional context setting shows the lines around each match. It's live: refine the query and the view refines, no re-running anything, even on a million-line file. Literal or regex, your choice.
Two things grep can't offer at all: the same file open in several tabs, filtered differently in each - errors in one, one request's ID in another - and Go to Line that reaches a line the filter is hiding rather than the nearest one it isn't.

Search still exists alongside (Find jumps between matches while the file stays put) - the app's own FAQ puts it plainly: Filter is usually what you actually wanted.
Free on the Mac App Store. No accounts, no network, no size limit from the app.
FAQ
How do I see only the errors in a log file?
In Terminal, grep -n "ERROR" app.log. In Log Viewer, type the pattern in Filter - the file collapses to the matching lines with their real line numbers, and a context setting brings back the lines around each match.
What's the difference between Find and Filter?
Find jumps between matches while the rest of the file stays where it is. Filter collapses the file to the matching lines only, keeping their original line numbers and marking every stretch it hid.
Can I filter the same file two ways at once?
Yes - open it in as many tabs as you like and filter each tab differently.