.. _module-pw_log-tokenized-args:

-----------------------
Tokenized log arguments
-----------------------
.. pigweed-module-subpage::
   :name: pw_log

The ``pw_log`` facade is intended to make the logging backend invisible to the
user, but some backend features require additional frontend support,
necessitating a break in the abstraction. One of these features is the logging
of nested token arguments in tokenized logs, because only the user is able to
know which log arguments can be tokens (see :ref:`module-pw_tokenizer` for
context on tokenization, and :ref:`module-pw_log_tokenized` for an example of
a tokenized logging backend). Arguments that have already been tokenized are
just unsigned integers, and not all strings can be compile-time constants, so
users must be provided with a way of manually marking token arguments.

To this end, ``pw_log/tokenized_args.h`` aliases macros from ``pw_tokenizer``
to enable logging nested tokens when the active backend uses tokenization.
These alias macros revert to plain string logging otherwise, allowing projects
to take advantage of nested token logging without breaking readable logs when
the project is built with a different logging backend. To support logging
nested token arguments, a ``pw_log`` backend must add an empty file
``log_backend_uses_pw_tokenizer.h`` under ``public_overrides/pw_log_backend/``.

Although the detokenizing backend accepts several different numeric bases, the
macros currently only support formatting nested tokens in hexadecimal, which
affects how the arguments appear in final logs if they cannot be detokenized
for any reason. Undetokenized tokens will appear inline as hex integers
prefixed with ``$#``, e.g. ``$#34d16466``.

.. doxygendefine:: PW_LOG_TOKEN_TYPE
.. doxygendefine:: PW_LOG_TOKEN
.. doxygendefine:: PW_LOG_TOKEN_EXPR
.. doxygendefine:: PW_LOG_TOKEN_FMT

Example usage with inline string arguments:

.. code-block:: cpp

   #include "pw_log/log.h"
   #include "pw_log/tokenized_args.h"

   // bool active_
   PW_LOG_INFO("Component is " PW_LOG_TOKEN_FMT(),
               active_ ? PW_LOG_TOKEN_EXPR("active")
                       : PW_LOG_TOKEN_EXPR("idle"));

Example usage with enums:

.. code-block:: cpp

   #include "pw_log/log.h"
   #include "pw_log/tokenized_args.h"

   namespace foo {

   enum class Color { kRed, kGreen, kBlue };

   PW_LOG_TOKEN_TYPE ColorToToken(Color color) {
     switch (color) {
       case Color::kRed:
         return PW_LOG_TOKEN_EXPR("kRed");
       case Color::kGreen:
         return PW_LOG_TOKEN_EXPR("kGreen");
       case Color::kBlue:
         return PW_LOG_TOKEN_EXPR("kBlue");
       default:
         return PW_LOG_TOKEN_EXPR("kUnknown");
     }
   }

   } // namespace foo

   void LogColor(foo::Color color) {
     PW_LOG("Color: [" PW_LOG_TOKEN_FMT() "]", color)
   }
