blob: 997cc36a84628e0593ee336287b4adf0fed59826 [file] [log] [blame] [edit]
.. _module-pw_log_basic:
------------
pw_log_basic
------------
.. pigweed-module::
:name: pw_log_basic
``pw_log_basic`` is a ``pw_log`` backend that sends logs over ``pw_sys_io`` by
default. The destination of ``pw_sys_io`` depends on the ``pw_sys_io`` backend
in use. This is controlled by the ``dir_pw_sys_io_backend`` variable in a
target's ``target_config.gni``.
Interface extension
===================
The log output may be changed from ``pw_sys_io`` to an arbitrary function by
calling ``pw::log_basic::SetOutput``.
.. cpp:namespace:: pw::log_basic
.. cpp:function:: void SetOutput(void (*log_output)(std::string_view))
Set the log output function, which defaults ``pw_sys_io::WriteLine``. This
function is called with each formatted log message.
Note that ``pw::log_baisc::SetOutput`` is not part of the :ref:`module-pw_log`
interface. As a result, in the Bazel build, any build target that calls this
function must:
* Explicitly list ``@pigweed//pw_log_basic:extension`` in its ``deps``. This
avoids a :ref:`module-pw_toolchain-bazel-layering-check` violation.
* Mark itself ``target_compatible_with`` only configurations for which the
`config_setting <https://bazel.build/reference/be/general#config_setting>`__
``@pigweed//pw_log_basic:is_active_backend`` is true. This informs the build
system that the target is only compatible with platforms that set the
:ref:`module-pw_log` backend to ``pw_log_basic``.
See ``//pw_hdlc:hdlc_sys_io_system_server`` for an example of such a target.
Implementation
==============
This module employs an internal buffer for formatting log strings, whose size
can be configured via the ``PW_LOG_BASIC_ENTRY_SIZE`` macro which defaults to
150 bytes. Any final log statements that are larger than
``PW_LOG_BASIC_ENTRY_SIZE - 1`` bytes (one byte used for a null terminator) will
be truncated.
.. note::
The documentation for this module is currently incomplete.