Fewer, labelled prints
Spraying prints makes the log unreadable and you stop trusting it. Instead pick two or three seams, label each print, and read the bracket they give you. Fewer prints give a clearer answer than more prints give noise.
When prints are not enough
For a loop that runs a thousand times, or a value that changes deep in a call tree, prints flood. That is what a real debugger is for. But most bugs are one seam wide, and a labelled print finds those in seconds. Reach for the debugger when the prints stop narrowing.