.. _config_application_logs:
Application logging
===================
Envoy and its filters write application logs for debuggability.
Envoy can be configured to output application logs in a format that is compatible with common log viewers.
This section documents how Envoy can be configured to enable integration with each log viewer.
Stackdriver Logging with GKE
----------------------------
`Stackdriver Logging `_ can read logs from containers running on
`Google Kubernetes Engine `_. Envoy should be configured
with the following :ref:`command line options `:
* ``--log-format '%L%m%d %T.%e %t envoy/%@] [%t][%n]%v'``: Logs are formatted in `glog `_
format, allowing Stackdriver to parse the log severity and timestamp.
* ``--log-format-escaped``: Each string that is logged will be printed in a single line.
C-style escape sequences (such as ``\n``) will be escaped and prevent a single string
from spanning multiple lines. This ensures each log line is structured with the glog prefix.
* The ``--log-path`` flag **does not** need to be set, since Stackdriver can read logs from STDERR.
* The ``--log-level`` flag can be set to control the log severity logged to Stackdriver.
`Reference documentation `_ for Stackdriver on GKE.
Printing logs in JSON format
----------------------------
It is possible to use the bootstrap config :ref:`json_format `
to print the logs in custom JSON format. The json format struct can support all the format flags that are specified in :ref:`command line options `,
except for the ``%v`` and ``%_`` flags, as they may break the JSON structure log. Instead, use the ``%j`` flag. Example:
.. code-block:: yaml
application_log_config:
log_format:
json_format:
Timestamp: "%Y-%m-%dT%T.%F"
ThreadId: "%t"
SourceLine: "%s:%#"
Level: "%l"
Message: "%j"
FixedValue: "SomeFixedValue"
.. note::
Setting both ``application_log_config.log_format`` and CLI option ``--log-format`` is not allowed, and will cause a bootstrap error.