|  | .. _system_log: | 
|  |  | 
|  | System Logging | 
|  | ############## | 
|  |  | 
|  | 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 |