The bootstrap subscriber installed before the config was loaded won the race for tracing's global subscriber, which can only be set once. The configured subscriber's try_init() was therefore always a silent no-op and observability.log_format was inert -- the deployed service, with log_format = "json", was writing ANSI-coloured text into the journal. The escape codes land in journald as literal bytes. Loads the configuration first and installs the subscriber once, since the configuration is what decides the format. Nothing is lost: a config load failure leaves main as an anyhow error with its context on stderr, which is where it was going anyway. Also disables ANSI unless stderr is a terminal. tracing_subscriber colours by default regardless of the writer, so escape codes were going into the journal and would go into any redirected log file. Verified: json emits one parseable object per line with no escapes, text emits plain text, and JOURNAL_STREAM still forces json for a service started by systemd whatever the file says. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XZG2i4AmfSqE97EJGBVb64