网站建设运营公司排行,静海商城网站建设,南海区住房城乡建设和水务局网站,计算机应用技术是学什么DPDK日志库为其他DPDK库和驱动程序提供日志记录功能。默认情况下#xff0c;在Linux应用程序中#xff0c;日志既发送到syslog#xff0c;也发送到控制台。在FreeBSD和Windows应用程序上#xff0c;日志只发送到控制台。但是#xff0c;用户可以覆盖日志功能以使用不同的日…DPDK日志库为其他DPDK库和驱动程序提供日志记录功能。默认情况下在Linux应用程序中日志既发送到syslog也发送到控制台。在FreeBSD和Windows应用程序上日志只发送到控制台。但是用户可以覆盖日志功能以使用不同的日志记录机制.
日志级别
来自应用程序和库的日志消息以给定的严重性级别进行报告。在rte_log.h中指定的这些级别是从最重要到最不重要 突发事件 紧急的 告警的 错误 警告 注意 信息 调试 在运行时应用程序将仅向日志输出发出配置级别或更高级别即重要性更高的消息。该级别可以由应用程序从日志库调用相关API来配置也可以由用户通过应用程序将–log级别参数传递给EAL来配置。
设置全局日志级别
要调整应用程序的全局日志级别只需将数字级别或级别名称传递给-log-level EAL参数即可。例如
/path/to/app --log-levelerror/path/to/app --log-leveldebug/path/to/app --log-level5 # warning在应用程序中可以使用rte_log_set_global_level API类似地设置日志级别。
设置组件的日志级别
在某些情况下例如出于调试目的可能希望仅增加或减少特定组件或组件集的日志级别。为了便于实现这一点–log级别参数还接受一个组件名称可选通配符以及该组件所需的级别。例如
/path/to/app --log-levellib.eal:crit/path/to/app --log-levellib.*:warning在应用程序中使用rte_log_set_level_pattern或rte_log.set_level_regexAPI可以获得相同的结果。
使用日志API生成日志消息
若要输出日志消息应使用rte_logAPI函数。除了日志消息rte_log还需要两个额外的参数 1日志级别 2日志组件类型
日志级别是一个数值如上所述。组件类型是一个唯一的id用于标识日志系统的特定DPDK组件。要获得此id每个组件都需要在启动时使用宏RTE_LOG_register_DEFAULT进行自身注册。此宏采用两个参数第二个参数是组件的默认日志级别。第一个参数称为“type”是组件中使用的“logtype”或“component-type”变量的名称。此变量将由宏定义并应在调用rte_log时作为第二个参数传递。通常大多数DPDK组件都定义了自己的日志宏以简化对日志API的调用。他们通过以下方式做到这一点 1将组件类型参数隐藏在宏中这样就不需要显式传递。 2使用rte_log.h中给出的日志级别定义允许使用简短的文本名称来代替数字日志级别。
以下代码取自rte_dmadev.c显示了日志注册以及快捷日志宏的后续定义。它可以用作任何使用DPDK日志记录的新组件的模板
RTE_LOG_REGISTER_DEFAULT(rte_dma_logtype, INFO);
#define RTE_DMA_LOG(level, ...) \rte_log(RTE_LOG_ ## level, rte_dma_logtype, RTE_FMT(dma: \RTE_FMT_HEAD(__VA_ARGS__,) \n, RTE_FMT_TAIL(__VA_ARGS__,)))注意 由于日志注册宏提供了logtype变量定义因此应将其放置在使用它的C文件的顶部附近。如果没有则应将logtype变量在文件顶部附近定义为“extern int”。 类似地如果日志记录由组件中的多个文件完成则只有一个文件应通过宏注册日志类型并且日志类型应在公共头文件中定义为“extern int”。任何特定于组件的日志宏都应该类似地在该标头中定义。
因此在整个dmadev库中所有日志记录调用的形式如下
RTE_DMA_LOG(ERR, Name cant be NULL);RTE_DMA_LOG(WARNING, Device %d already started, dev_id);