:orphan:

.. _system_log:

System Logging (Deprecated)
###########################

.. note::

   This feature is deprecated, please use :ref:`logger` instead.

The system log API provides a common interface to process messages issued by
developers. These messages are currently printed on the terminal but the API is
defined in a generic way.

This API can be deactivated through the Kconfig options, see
:ref:`global_kconfig`.
This approach prevents impacting image size and execution time when the system
log is not needed.

Each of the four ``SYS_LOG_X`` macros correspond to a different logging level,
The logging macros activate when their logging level or higher is set.

There are two configuration categories: configurations per module and global
configurations. When logging is enabled globally, it works for modules. However,
modules can disable logging locally. Every module can specify its own logging
level. The module must define the :c:macro:`SYS_LOG_LEVEL` macro before
including the :file:`include/logging/sys_log.h` header file to do so. Unless a global
override is set, the module logging level will be honored. The global override
can only increase the logging level. It cannot be used to lower module logging
levels that were previously set higher.

You can set a local domain to differentiate messages. When no domain is set,
then the ``[general]`` domain appears before the message. Define the
:c:macro:`SYS_LOG_DOMAIN` macro before including the :file:`include/logging/sys_log.h`
header file to set the domain.

When several macros are active, the printed messages can be differentiated in
two ways: by a tag printed before the message or by ANSI colors. See the
:option:`CONFIG_SYS_LOG_SHOW_TAGS` and :option:`CONFIG_SYS_LOG_SHOW_COLOR`
Kconfig options for more information.

Define the :c:macro:`SYS_LOG_NO_NEWLINE` macro before including the
:file:`include/logging/sys_log.h` header file to prevent macros appending a new line at the
end of the logging message.

.. _global_kconfig:

Global Kconfig Options
**********************

These options can be found in the following path :file:`subsys/logging/Kconfig`.

:option:`CONFIG_SYS_LOG`: Global switch, turns on/off all system logging.

:option:`CONFIG_SYS_LOG_DEFAULT_LEVEL`: Default level, sets the logging level
used by modules that are not setting their own logging level.

:option:`CONFIG_SYS_LOG_SHOW_TAGS`: Globally sets whether level tags will be
shown on log or not.

:option:`CONFIG_SYS_LOG_SHOW_COLOR`: Globally sets whether ANSI colors will be
used by the system log.

:option:`CONFIG_SYS_LOG_OVERRIDE_LEVEL`: It overrides module logging level when
it is not set or set lower than the override value.

Example
*******

The following macro:

    .. code-block:: c

     SYS_LOG_WRN("hi!");

Will produce:

    .. code-block:: console

     [general] [WRN] main: Hi!

For the above example to work at least one of the following settings must be
true:

- The :option:`CONFIG_SYS_LOG_DEFAULT_LEVEL` is set to 2 or above and module
  configuration is not set.
- The module configuration is set to 2 or above.
- The :option:`CONFIG_SYS_LOG_OVERRIDE_LEVEL` is set to 2 or above.


APIs
****

.. doxygengroup:: system_log
   :project: Zephyr
