zephyr/subsys/logging/Kconfig

546 lines
16 KiB
Plaintext

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
menuconfig LOG
bool "Logging"
select PRINTK if USERSPACE
help
Global switch for the logger, when turned off log calls will not be
compiled in.
if LOG
config LOG_MINIMAL
bool "Enable minimal-footprint logging"
imply PRINTK
help
Enable minimal logging implementation. This has very little footprint
overhead on top of the printk() implementation for standard
logging macros. Hexdump macros are also supported, with a small
amount of code pulled in if used. Build time filtering is supported,
but not runtime filtering. There are no timestamps, prefixes,
colors, or asynchronous logging, and all messages are simply
sent to printk().
config LOG_RUNTIME_FILTERING
bool "Enable runtime reconfiguration of the logger"
depends on !LOG_FRONTEND && !LOG_MINIMAL
help
Allow runtime configuration of maximal, independent severity
level for instance.
config LOG_DEFAULT_LEVEL
int "Default log level"
default 3
range 0 4
help
Sets log level for modules which don't specify it explicitly. When
set to 0 it means log will not be activated for those modules.
Levels are:
- 0 OFF, do not write by default
- 1 ERROR, default to only write LOG_LEVEL_ERR
- 2 WARNING, default to write LOG_LEVEL_WRN
- 3 INFO, default to write LOG_LEVEL_INFO
- 4 DEBUG, default to write LOG_LEVEL_DBG
config LOG_OVERRIDE_LEVEL
int "Override lowest log level"
default 0
range 0 4
help
Forces a minimum log level for all modules. Modules use their
specified level if it is greater than this option, otherwise they use
the level specified by this option instead of their default or
whatever was manually set.
Levels are:
- 0 OFF, do not override
- 1 ERROR, override to write LOG_LEVEL_ERR
- 2 WARNING, override to write LOG_LEVEL_WRN
- 3 INFO, override to write LOG_LEVEL_INFO
- 4 DEBUG, override to write LOG_LEVEL_DBG
config LOG_MAX_LEVEL
int "Maximal log level compiled in the system"
default 4
range 0 4
help
Forces a maximal log level for all modules. Modules saturates their
specified level if it is greater than this option, otherwise they use
the level specified by this option instead of their default or
whatever was manually set.
Levels are:
- 0 OFF, logging is turned off
- 1 ERROR, maximal level set to LOG_LEVEL_ERR
- 2 WARNING, maximal level set to LOG_LEVEL_WRN
- 3 INFO, maximal level set to LOG_LEVEL_INFO
- 4 DEBUG, maximal level set to LOG_LEVEL_DBG
config LOG_MIPI_SYST_ENABLE
bool "Enable mipi syst format output"
select MIPI_SYST_LIB
help
Enable mipi syst format output for the logger system.
if !LOG_MINIMAL
menu "Prepend log message with function name"
depends on !LOG_FRONTEND
config LOG_FUNC_NAME_PREFIX_ERR
bool "Error messages prepended"
config LOG_FUNC_NAME_PREFIX_WRN
bool "Warning messages prepended"
config LOG_FUNC_NAME_PREFIX_INF
bool "Info messages prepended"
config LOG_FUNC_NAME_PREFIX_DBG
bool "Debug messages prepended"
default y
endmenu
config LOG_PRINTK
bool "Enable processing of printk messages."
help
LOG_PRINTK messages are formatted in place and logged unconditionally.
config LOG_PRINTK_MAX_STRING_LENGTH
int "Maximum string length supported by LOG_PRINTK"
depends on LOG_PRINTK
depends on (!LOG_IMMEDIATE || USERSPACE)
default 128
help
Array is allocated on the stack.
config LOG_IMMEDIATE
bool "Enable synchronous processing"
help
When enabled log is processed in the context of the call. It impacts
performance of the system since time consuming operations are
performed in the context of the log entry (e.g. high priority
interrupt).Logger backends must support exclusive access to work
flawlessly in that mode because one log operation can be interrupted
by another one in the higher priority context.
config LOG_IMMEDIATE_CLEAN_OUTPUT
bool "Enable clean log output"
depends on LOG_IMMEDIATE
help
If enabled, interrupts are locked during whole log message processing.
As a result, processing on one log message cannot be interrupted by
another one and output is clean, not interleaved. However, enabling
this option is causing interrupts locking for significant amount of
time (up to multiple milliseconds).
config LOG_ENABLE_FANCY_OUTPUT_FORMATTING
depends on MINIMAL_LIBC
bool "Format strings with minimal libc _prf() instead of _vprintk()"
help
Selecting this option will choose more robust _prf() function from
minimal libc for handling format strings instead of the _vprintk()
function. Choosing this option adds around ~3K flash and ~250 bytes on
stack.
if !LOG_IMMEDIATE
choice
prompt "Log full strategy"
config LOG_MODE_OVERFLOW
bool "Oldest logs are discarded"
config LOG_MODE_NO_OVERFLOW
bool "New logs are dropped"
endchoice
config LOG_BLOCK_IN_THREAD
bool "On log full block in thread context"
help
When enabled logger will block (if in the thread context) when
internal logger buffer is full and new message cannot be allocated.
config LOG_BLOCK_IN_THREAD_TIMEOUT_MS
int "Maximum time (in milliseconds) thread can be blocked"
default 1000
range -1 10000
depends on LOG_BLOCK_IN_THREAD
help
If new buffer for a log message cannot be allocated in that time, log
message is dropped. Forever blocking (-1) is possible however may lead
to the logger deadlock if logging is enabled in threads used for
logging (e.g. logger or shell thread).
config LOG_PROCESS_TRIGGER_THRESHOLD
int "Amount of buffered logs which triggers processing thread."
default 10
help
When number of buffered messages reaches the threshold thread is waken
up. Log processing thread ID is provided during log initialization.
Set 0 to disable the feature. If LOG_PROCESS_THREAD is enabled then
this threshold is used by the internal thread.
config LOG_PROCESS_THREAD
bool "Enable internal thread for log processing"
depends on MULTITHREADING
default y
help
When enabled thread is created by the logger subsystem. Thread is
waken up periodically (see LOG_PROCESS_THREAD_SLEEP_MS) and whenever
number of buffered messages exceeds the threshold (see
LOG_PROCESS_TRIGGER_THR).
if LOG_PROCESS_THREAD
config LOG_PROCESS_THREAD_SLEEP_MS
int "Set internal log processing thread sleep period"
default 1000
help
Log processing thread sleeps for requested period given in
milliseconds. When waken up, thread process any buffered messages.
config LOG_PROCESS_THREAD_STACK_SIZE
int "Stack size for the internal log processing thread"
default 2048 if COVERAGE_GCOV
default 1024 if NO_OPTIMIZATIONS
default 1024 if XTENSA
default 4096 if (X86 && X86_64)
default 4096 if ARM64
default 768
help
Set the internal stack size for log processing thread.
endif # LOG_PROCESS_THREAD
config LOG_BUFFER_SIZE
int "Number of bytes dedicated for the logger internal buffer."
default 1024
range 128 65536
help
Number of bytes dedicated for the logger internal buffer.
config LOG_DETECT_MISSED_STRDUP
bool "Detect missed handling of transient strings"
default y if !LOG_IMMEDIATE
help
If enabled, logger will assert and log error message is it detects
that string format specifier (%s) and string address which is not from
read only memory section and not from pool used for string duplicates.
String argument must be duplicated in that case using log_strdup().
Detection is performed during log processing thus it does not impact
logging timing.
config LOG_STRDUP_MAX_STRING
int "Longest string that can be duplicated using log_strdup()"
default 46 if NETWORKING
default 32
help
Longer strings are truncated.
config LOG_STRDUP_BUF_COUNT
int "Number of buffers in the pool used by log_strdup()"
default 4
help
Number of calls to log_strdup() which can be pending before flushed
to output. If "<log_strdup alloc failed>" message is seen in the log
output, it means this value is too small and should be increased.
Each entry takes CONFIG_LOG_STRDUP_MAX_STRING bytes of memory plus
some additional fixed overhead.
config LOG_STRDUP_POOL_PROFILING
bool "Enable profiling of pool used for log_strdup()"
help
When enabled, maximal utilization of the pool is tracked. It can
be read out using shell command.
endif # !LOG_IMMEDIATE
config LOG_DOMAIN_ID
int "Domain ID"
default 0
range 0 7
help
In multicore system each application/core must have unique domain ID.
config LOG_CMDS
bool "Enable shell commands"
depends on SHELL
default y if SHELL
config LOG_FRONTEND
bool "Enable frontend"
select LOG_IMMEDIATE
help
When enabled, logs are redirected to a custom frontend instead
of being processed by the logger.
config LOG_BACKEND_UART
bool "Enable UART backend"
depends on UART_CONSOLE
default y if !SHELL_BACKEND_SERIAL
help
When enabled backend is using UART to output logs.
config LOG_BACKEND_UART_SYST_ENABLE
bool "Enable UART syst backend"
depends on LOG_BACKEND_UART
depends on LOG_MIPI_SYST_ENABLE
help
When enabled backend is using UART to output syst format logs.
config LOG_BACKEND_SWO
bool "Enable Serial Wire Output (SWO) backend"
depends on HAS_SWO
help
When enabled, backend will use SWO for logging.
if LOG_BACKEND_SWO
config LOG_BACKEND_SWO_FREQ_HZ
int "Set SWO output frequency"
default 0
help
Set SWO output frequency. Value 0 will select maximum frequency
supported by the given MCU. Not all debug probes support high
frequency SWO operation. In this case the frequency has to be set
manually.
SWO value defined by this option will be configured at boot. Most SWO
viewer programs will configure SWO frequency when attached to the
debug probe. Such configuration will persist only until the device
reset. To ensure flawless operation the frequency configured here and
by the SWO viewer program has to match.
config LOG_BACKEND_SWO_SYST_ENABLE
bool "Enable SWO syst backend"
depends on LOG_MIPI_SYST_ENABLE
help
When enabled backend is using SWO to output syst format logs.
endif # LOG_BACKEND_SWO
config LOG_BACKEND_RTT
bool "Enable Segger J-Link RTT backend"
depends on USE_SEGGER_RTT
default y if !SHELL_BACKEND_RTT
help
When enabled, backend will use RTT for logging. This backend works on a per
message basis. Only a whole message (terminated with a carriage return: '\r')
is transferred to up-buffer at once depending on available space and
selected mode.
In panic mode backend always blocks and waits until there is space
in up-buffer for a message and message is transferred to host.
if LOG_BACKEND_RTT
choice
prompt "Logger behavior"
default LOG_BACKEND_RTT_MODE_BLOCK
config LOG_BACKEND_RTT_MODE_DROP
bool "Drop messages that do not fit in up-buffer."
help
If there is not enough space in up-buffer for a message, drop it.
Number of dropped messages will be logged.
Increase up-buffer size helps to reduce dropping of messages.
config LOG_BACKEND_RTT_MODE_BLOCK
bool "Block until message is transferred to host."
help
Waits until there is enough space in the up-buffer for a message.
config LOG_BACKEND_RTT_SYST_ENABLE
bool "Enable RTT syst backend"
depends on LOG_MIPI_SYST_ENABLE
help
When enabled backend is using RTT to output syst format logs.
endchoice
config LOG_BACKEND_RTT_MESSAGE_SIZE
int "Size of internal buffer for storing messages."
range 32 256
default 128
depends on LOG_BACKEND_RTT_MODE_DROP
help
This option defines maximum message size transferable to up-buffer.
if LOG_BACKEND_RTT_MODE_BLOCK
config LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE
int "Size of the output buffer"
default 16
help
Buffer is used by log_output module for preparing output data (e.g.
string formatting).
config LOG_BACKEND_RTT_RETRY_CNT
int "Number of retries"
default 4
help
Number of TX retries before dropping the data and assuming that
RTT session is inactive.
config LOG_BACKEND_RTT_RETRY_DELAY_MS
int "Delay between TX retries in milliseconds"
default 5
help
Sleep period between TX retry attempts. During RTT session, host pulls
data periodically. Period starts from 1-2 milliseconds and can be
increased if traffic on RTT increases (also from host to device). In
case of heavy traffic data can be lost and it may be necessary to
increase delay or number of retries.
endif # LOG_BACKEND_RTT_MODE_BLOCK
config LOG_BACKEND_RTT_BUFFER
int "Buffer number used for logger output."
range 0 SEGGER_RTT_MAX_NUM_UP_BUFFERS
default 0
help
Select index of up-buffer used for logger output, by default it uses
terminal up-buffer and its settings.
config LOG_BACKEND_RTT_BUFFER_SIZE
int "Size of reserved up-buffer for logger output."
default 1024
depends on LOG_BACKEND_RTT_BUFFER > 0
help
Specify reserved size of up-buffer used for logger output.
# Enable processing of printk calls using log if terminal buffer is used.
# Same buffer is used by RTT console. If printk would go through RTT console
# that will lead to corruption of RTT data which is not protected against being
# interrupted by an interrupt.
config LOG_BACKEND_RTT_FORCE_PRINTK
bool
default y if LOG_BACKEND_RTT_BUFFER = 0 && RTT_CONSOLE
select LOG_PRINTK
endif # LOG_BACKEND_RTT
config LOG_BACKEND_NATIVE_POSIX
bool "Enable native backend"
depends on ARCH_POSIX
help
Enable backend in native_posix
config LOG_BACKEND_XTENSA_SIM
bool "Enable xtensa simulator backend"
depends on SOC_XTENSA_SAMPLE_CONTROLLER || SOC_INTEL_APL_ADSP
help
Enable backend in xtensa simulator
config LOG_BACKEND_XTENSA_OUTPUT_BUFFER_SIZE
int "Size of the output buffer"
default 16
depends on LOG_BACKEND_XTENSA_SIM
help
Buffer is used by log_output module for preparing output data (e.g.
string formatting).
config LOG_BACKEND_NET
bool "Enable networking backend"
depends on NETWORKING
select NET_CONTEXT_NET_PKT_POOL
help
Send syslog messages to network server.
See RFC 5424 (syslog protocol) and RFC 5426 (syslog over UDP)
specifications for details.
if LOG_BACKEND_NET
config LOG_BACKEND_NET_SERVER
string "Syslog server IP address"
help
This can be either IPv4 or IPv6 address.
Server listen UDP port number can be configured here too.
Following syntax is supported:
192.0.2.1:514
192.0.2.42
[2001:db8::1]:514
[2001:db8::2]
2001:db::42
config LOG_BACKEND_NET_MAX_BUF
int "How many network buffers to allocate for sending messages"
range 3 256
default 3
help
Each syslog message should fit into a network packet that will be
sent to server. This number tells how many syslog messages can be
in transit to the server.
config LOG_BACKEND_NET_MAX_BUF_SIZE
int "Max syslog message size"
range 64 1180
default 1180 if NET_IPV6
default 480 if NET_IPV4
default 256
help
As each syslog message needs to fit to UDP packet, set this value
so that messages are not truncated.
The RFC 5426 recommends that for IPv4 the size is 480 octets and for
IPv6 the size is 1180 octets. As each buffer will use RAM, the value
should be selected so that typical messages will fit the buffer.
config LOG_BACKEND_NET_SYST_ENABLE
bool "Enable networking syst backend"
depends on LOG_MIPI_SYST_ENABLE
help
When enabled backend is using networking to output syst format logs.
endif # LOG_BACKEND_NET
config LOG_BACKEND_RB
bool "Enable memory ring buffer backend"
select RING_BUFFER
help
Enable backend in memory using ring buffer to keep messages.
if LOG_BACKEND_RB
config LOG_BACKEND_RB_MEM_BASE
hex "Ring buffer memory base address"
help
Address of the ring buffer in the memory.
config LOG_BACKEND_RB_MEM_SIZE
int "Size of the ring buffer"
help
Size of the ring buffer. Must be multiply of the message slot
size.
config LOG_BACKEND_RB_SLOT_SIZE
int "Size of the message slot"
default 64
help
Size of the message slot inside ring buffer. All log messages
are split to similar sized logging slots.
endif # LOG_BACKEND_RB
config LOG_BACKEND_SHOW_COLOR
bool "Enable colors in the backend"
depends on LOG_BACKEND_UART || LOG_BACKEND_NATIVE_POSIX || LOG_BACKEND_RTT \
|| LOG_BACKEND_SWO || LOG_BACKEND_XTENSA_SIM
default y
help
When enabled selected backend prints errors in red and warning in yellow.
config LOG_BACKEND_FORMAT_TIMESTAMP
bool "Enable timestamp formatting in the backend"
depends on LOG_BACKEND_UART || LOG_BACKEND_NATIVE_POSIX || LOG_BACKEND_RTT \
|| LOG_BACKEND_SWO || LOG_BACKEND_XTENSA_SIM
default y
help
When enabled timestamp is formatted to hh:mm:ss:ms,us.
endif # LOG_MINIMAL
endif # LOG