Log one line per request milestone with a shared correlation ID across jobs and HTTP. JSON or key=value formats parse cleanly in your aggregator.
Reserve error for actionable failures; noisy info logs in hot paths become expensive and hide real incidents.
Sample debug-level logs in production if you must—full verbosity rarely belongs on every instance.