NVIDIA Holoscan SDK v2.9.0

日志

Holoscan SDK 使用 Logger 模块向用户传递消息。这些消息被分类为不同的严重级别(见下文),以告知用户消息的严重程度,并作为控制打印到终端的消息数量和详细程度的一种方式。 有两个设置可用于此目的

  • Logger 级别

  • Logger 格式

Logger 级别

使用 Logger 模块记录的消息具有严重级别,例如,消息可以分为 INFO、WARN、ERROR 等。

应用程序的默认日志级别是打印严重级别为 INFO 或更高级别的消息,即,分类为 INFO、WARN、ERROR 和 CRITICAL 的消息。您可以通过调用 set_log_level() (C++/Python) 在应用程序代码中修改此默认值,以覆盖 SDK 默认日志级别并为其指定以下日志级别之一。

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • CRITICAL

  • OFF

复制
已复制!
            

#include <holoscan/holoscan.hpp> int main() { holoscan::set_log_level(holoscan::LogLevel::WARN); // ... return 0; }

复制
已复制!
            

from holoscan.logger import set_log_level def main(): set_log_level(LogLevel::WARN) # ... if __name__ == "__main__": main()

此外,在运行时,用户可以将 HOLOSCAN_LOG_LEVEL 环境变量设置为上面列出的值之一。 这为用户提供了灵活性,以便在出现问题时启用诊断信息的打印以进行调试。

复制
已复制!
            

export HOLOSCAN_LOG_LEVEL=TRACE

注意

在底层,Holoscan SDK 使用 GXF 执行计算图。默认情况下,此 GXF 层使用与 Holoscan SDK 相同的日志级别。 如果希望独立于 Holoscan SDK 日志级别覆盖此执行器的日志级别,则可以使用环境变量 HOLOSCAN_EXECUTOR_LOG_LEVEL。 它支持与 HOLOSCAN_LOG_LEVEL 相同的级别。

注意

对于分布式应用程序,有时启用 UCX 库的额外日志记录也很有用,UCX 库用于在片段之间传输数据。 这可以通过将 UCX 环境变量 UCX_LOG_LEVEL 设置为以下之一来完成:fatal、error、warn、info、debug、trace、req、data、async、func、poll。 这些行为如此处所述: UCX 日志级别

打印消息时,默认消息格式显示消息严重级别、文件名:行号以及要打印的消息。

例如

复制
已复制!
            

[info] [ping_multi_port.cpp:114] Rx message value1: 51 [info] [ping_multi_port.cpp:115] Rx message value2: 54

您可以通过调用 set_log_pattern() (C++/Python) 在应用程序代码中修改此默认值,以覆盖 SDK 默认日志格式。

模式字符串可以是以下预定义值之一

  • SHORT : 打印消息严重级别和消息

  • DEFAULT : 打印消息严重级别、文件名:行号和消息

  • LONG : 打印时间戳、应用程序、消息严重级别、文件名:行号和消息

  • FULL : 打印时间戳、线程 ID、应用程序、消息严重级别、文件名:行号和消息

复制
已复制!
            

#include <holoscan/holoscan.hpp> int main() { holoscan::set_log_pattern("SHORT") // ... return 0; }

复制
已复制!
            

from holoscan.logger import set_log_pattern def main(): set_log_pattern("SHORT") # ... if __name__ == "__main__": main()

使用此 logger 格式,上述应用程序将显示具有以下格式的消息

复制
已复制!
            

[info] Rx message value1: 51 [info] Rx message value2: 54

或者,模式字符串可以是自定义模式以自定义 logger 格式。 使用此字符串模式

复制
已复制!
            

"[%Y-%m-%d %H:%M:%S.%e] [%n] [%^%l%$] [%s:%#] %v";

将显示以下格式

复制
已复制!
            

[2023-06-27 14:22:36.073] [holoscan] [info] [ping_multi_port.cpp:114] Rx message value1: 51 [2023-06-27 14:22:36.073] [holoscan] [info] [ping_multi_port.cpp:115] Rx message value2: 54

有关自定义格式和每个标志的详细信息,请参阅 spdlog wiki 页面

此外,在运行时,用户还可以设置 HOLOSCAN_LOG_FORMAT 环境变量来修改 logger 格式。 接受的字符串模式与上述 set_log_pattern() api 的字符串模式相同。

Logger 级别和 Logger 格式的优先级

HOLOSCAN_LOG_LEVEL 环境变量优先并覆盖应用程序设置,例如 Logger::set_log_level() (C++/Python)。

当设置 HOLOSCAN_LOG_LEVEL 时,它确定日志级别。 如果未设置此环境变量,则如果应用程序设置可用,则使用应用程序设置。 否则,应用 SDK 的默认日志级别 INFO。

类似地,HOLOSCAN_LOG_FORMAT 环境变量优先并覆盖应用程序设置,例如 Logger::set_log_pattern() (C++/Python)。

当设置 HOLOSCAN_LOG_FORMAT 时,它确定日志格式。 如果未设置此环境变量,则如果应用程序设置可用,则使用应用程序设置。 否则,应用 SDK 的默认日志格式,具体取决于当前日志级别(DEBUGTRACE 日志级别的 FULL 格式。DEFAULT 格式用于其他日志级别)。

C++ API 使用 HOLOSCAN_LOG_XXX() 宏在应用程序中记录消息。 这些宏使用 fmtlib 格式字符串语法作为其格式字符串。

注意

当创建 Application 类实例时,Holoscan 会自动检查 HOLOSCAN_LOG_LEVEL 环境变量并设置日志级别。 但是,这些日志级别设置用于 Holoscan 核心或 C++ 运算符 (C++) 的日志消息(例如 HOLOSCAN_LOG_INFO 宏),而不是用于 Python 的日志记录。 Python API 的用户应使用内置的 logging 模块来记录消息。 您必须在使用前配置 logger (logging.basicConfig(level=logging.INFO))

复制
已复制!
            

>>> import logging >>> logger = logging.getLogger("main") >>> logger.info('hello') >>> logging.basicConfig(level=logging.INFO) >>> logger.info('hello') INFO:main:hello

上一篇 Holoscan 应用程序中的 CUDA 流处理
下一篇 调试
© 版权所有 2022-2024,NVIDIA。 上次更新于 2025 年 1 月 27 日。