Try Apollo Studio

Logging in the Apollo Router

The Apollo Router accepts a command-line argument to set its log level:


The log level, indicating the most severe log message type to include. In ascending order of verbosity, can be one of: off, error, warn, info, debug, or trace.

The default value is info.

The router also accepts an APOLLO_ROUTER_LOG environment variable with the same possible values as the command-line argument. If you provide both, the command-line argument takes precedence.

Output formats

The Apollo Router supports two logging formats:

  • Basic logging, primarily for local development
  • JSON-formatted logging, for compatibility with searchable logging tools like Google Cloud Logging

The router uses basic logging whenever an interactive shell session is attached, and it uses JSON-formatted logging otherwise (e.g., in CI and deployed environments).

Basic logging via shell

Basic logging is mostly used during local development:

2022-03-18T10:28:11.090054Z INFO apollo_router::executable: apollo-router@0.1.0-alpha.9
2022-03-18T10:28:11.160650Z INFO apollo_router: Starting Apollo Router
2022-03-18T10:28:11.339906Z INFO apollo_router: Listening on 🚀

JSON-formatted logging

JSON-formatted logging provides compatibility with common searchable logging tools like Google Cloud Logging. The Apollo Router uses the popular Bunyan format:

{"timestamp":"2022-03-18T11:46:41.985121Z","level":"INFO","fields":{"message":"Starting Apollo Router"},"target":"apollo_router"}
{"timestamp":"2022-03-18T11:46:42.171173Z","level":"INFO","fields":{"message":"Listening on 🚀"},"target":"apollo_router"}

Advanced configuration

For more granular control over Apollo Router logging, see the Env Logger documentation.

Note that reqwest_tracing must be set to at least INFO for tracing to subgraphs to work. This is because request tracing propagation happens at INFO level.

Edit on GitHub
CSRF prevention
Header propagation