Zephyr日志使用指南-常用配置项

Creative Commons
本作品采用知识共享署名

本文说明Zephyr日志常见配置项及作用。

消息输出模式

subsys/logging/Kconfig.mode

消息输出模式决定了日志系统的效能和消息的输出方式,总计有4总模式,只能选择一个不能同时存在

  • CONFIG_LOG_MODE_DEFERRED=y 延迟输出模式,是日志系统默认的输出方式。前端异步发送,耗时的处理被延迟到日志系统内的线程中处理,这种方式对应用的影响最小。

  • CONFIG_LOG_MODE_IMMEDIATE=y 立即输出模式,就在当前的上下文中输出消息。前端调用后端同步发送,直接影响调用者的效能。

  • CONFIG_LOG_MODE_MINIMAL=y 最小实现模式,日志直接通过printk同步输出。没有标签,时间戳,不支持颜色和异步延迟,不支持运行时过滤。只有非常简单的日志等级标识,示例

    E: Error message example.
    W: Warning message example.
    I: Info message example.

  • CONFIG_LOG_FRONTEND=y 输出被重定向到自定前端。

过滤

subsys/logging/Kconfig.filtering

过滤的配置决定日志系统过滤器的特性,以下所有配置项的范围都为

  • CONFILG_<MODULE>_LOG_LEVEL:模块的过滤等级,默认为3。

  • CONFIG_LOG_DEFAULT_LEVEL:默认的过滤等级,默认为3。

日志处理

subsys/logging/Kconfig.processing

  • CONFIG_LOG_PRINTK=yprintk的输出被重定向到日志系统,默认为n
  • CONFIG_LOG_PRINTK_MAX_STRING_LENGTH=256printk可处理的最大字符串长度,超过将被截断。默认为128字节,使用的是堆栈空间。
  • CONFIG_LOG_MODE_OVERFLOW=y:日志消息溢出处理方式,y表示丢掉老的保留新的,n表示丢掉新的。默认为y
  • CONFIG_LOG_BLOCK_IN_THREAD=y:前端写消息可等待,如果等待不到再做溢出处理。搭配CONFIG_LOG_BLOCK_IN_THREAD_TIMEOUT_MS进行等待时间设置,默认为n不等待。
  • CONFIG_LOG_BLOCK_IN_THREAD_TIMEOUT_MS前端写消息等待时间,可设置范围-1~10000,单位为毫秒。-1表示永远等待,0表示不等待。默认为1000,等待1秒。
  • CONFIG_LOG_PROCESS_TRIGGER_THRESHOLD=3消息输出的阈值,当日志系统的缓存的消息超过该阈值时才会向后端输出,默认为10。该配置和CONFIG_LOG_PROCESS_THREAD_SLEEP_MS只要有一个满足就会使用后端输出。
  • CONFIG_LOG_PROCESS_THREAD=y:日志系统自带线程用于延迟输出,默认为y。当设置为n时,需要用户调用log_process进行消息输出处理。
  • CONFIG_LOG_PROCESS_THREAD_STARTUP_DELAY_MS=100:日志系统自带线程创建后延迟启动时间,默认为0不延迟。
  • CONFIG_LOG_PROCESS_THREAD_SLEEP_MS=10:日志系统自带线程唤醒周期,按该间隔进行日志输出处理,该事件越短显示就越从前端输入到后端输出的间隔就越短。默认为1000也就是1秒。当希望LOG输出比较即时时可以缩段该时间。
  • CONFIG_LOG_BUFFER_SIZE:日志系统消息缓存大小,可配置范围128~65536,默认为1024,该项越大越不容易丢日志。
  • CONFIG_LOG_TRACE_SHORT_TIMESTAMP=y 使用时间戳,默认为y时间戳的长度为24bit。配置为n时表示不使用时间戳。
  • CONFIG_LOG_TIMESTAMP_64BIT=y :默认为n,配置为y时使用64bit时间戳。
  • CONFIG_LOG_SPEED=y:默认为n,配置为y时日志系统牺牲空间换取执行时间的提升。

格式

subsys/logging/Kconfig.processing

  • LOG_FUNC_NAME_PREFIX_*:日志中加入函数名标签,只对LOG_*有效,对LOG_HEXDUMP_*无效。
    • CONFIG_LOG_FUNC_NAME_PREFIX_ERR=y 在ERROR等级消息中加入函数名,默认为n
    • CONFIG_LOG_FUNC_NAME_PREFIX_WRN=y 在WARNING等级消息中加入函数名,默认为n
    • CONFIG_LOG_FUNC_NAME_PREFIX_INF=y 在INF等级消息中加入函数名,默认为n
    • CONFIG_LOG_FUNC_NAME_PREFIX_DBG=y 在DEBUG等级消息中加入函数名,默认为y
  • CONFIG_LOG_BACKEND_SHOW_COLOR=y:后端日志消息显示颜色,默认为y要显示。ERROR等级的显示为红色,WRANING等级的显示为黄色。颜色对shell_log_backend无效。
  • CONFIG_LOG_INFO_COLOR_GREEN=y:后端INFO等级消息显示为绿色,默认为不显示颜色。

后端

subsys/logging/Kconfig.backend
在没有配置CONFIG_SHELL=y的情况下默认开启CONFIG_SHELL_LOG_BACKEND使用shell作为LOG的后端。

  • CONFIG_LOG_BACKEND_UART=y 启用串口后端,默认为n启用。当没有开启Shell时默认使用UART作为LOG后端。
  • CONFIG_LOG_BACKEND_NET启用网络后端,默认为n不启用。
  • CONFIG_LOG_BACKEND_FS启用文件系统 后端,默认为n不启用。

参考

https://docs.zephyrproject.org/latest/services/logging/index.html