DPDK 18 log日志系统使用
概述:
DPDK 日志系统分为1-8个等级,在lib/librte_eal/common/include/rte_log.h文件中定义,每个DPDK模块都可以定义一个预设日志输出等级,只有日志输出语句的等级小于等于预设输出等级才能被输出。
以下为dpdk对日志的分级:
/* Can't use 0, as it gives compiler warnings */
#define RTE_LOG_EMERG 1U /**< System is unusable. */
#define RTE_LOG_ALERT 2U /**< Action must be taken immediately. */
#define RTE_LOG_CRIT 3U /**< Critical conditions. */
#define RTE_LOG_ERR 4U /**< Error conditions. */
#define RTE_LOG_WARNING 5U /**< Warning conditions. */
#define RTE_LOG_NOTICE 6U /**< Normal but significant condition. */
#define RTE_LOG_INFO 7U /**< Informational. */
#define RTE_LOG_DEBUG 8U /**< Debug-level messages. */
Dpdk 使用int rte_log(uint32_t level, uint32_t logtype, const char *format, …); 函数打印日志,传入参数为:
此条日志输出等级,
日志type,
输出log信息,
但在dpdk中并不会直接使用rte_log,而是不同模块对它进行二次封装后使用
日志输出分析
例如在drivers/net/ixgbe/ixgbe_ethdev.c + 1038 ,此条log默认不会被输出,分析见后文
PMD_DRV_LOG(DEBUG, "SWFW phy%d lock released", hw->bus.func);
PMD_DRV_LOG的宏定义在ixgbe_log.h (通过ixgbe_ethdev.c对头文件的include可以看出,每个使用了LOG的地方,都会include一个xxx_log.h的文件),它的定义为:
extern int ixgbe_logtype_driver;
#define PMD_DRV_LOG_RAW(level, fmt, args...) \rte_log(RTE_LOG_ ## level, ixgbe_logtype_driver, "%s(): " fmt, \__func__, ## args)
传入的DEBUG被拼接为了RTE_LOG_DEBUG
对于宏中的ixgbe_logtype_driver 变量的定义和初始化:
//drivers/net/ixgbe/ixgbe_ethdev.c +8916 RTE_INIT(ixgbe_init_log){ixgbe_logtype_init = rte_log_register("pmd.net.ixgbe.init");if (ixgbe_logtype_init >= 0)rte_log_set_level(ixgbe_logtype_init, RTE_LOG_NOTICE);ixgbe_logtype_driver = rte_log_register("pmd.net.ixgbe.driver");if (ixgbe_logtype_driver >= 0)rte_log_set_level(ixgbe_logtype_driver, RTE_LOG_NOTICE);}
- 调用rte_log_register函数为ixgbe注册了名为”pmd.net.ixgbe.init”的日志type
返回一个int作为此日志的type( ixgbe_logtype_driver是为了方便代码编写,”pmd.net.ixgbe.init”是为了方便用户,他们是一一映射的)。 - 随后使用rte_log_set_level设置了默认日志输出等级为RTE_LOG_NOTICE
RTE_LOG_NOTICE<RTE_LOG_DEBUG,因此pmd.net.ixgbe.init日志 的DEBUG信息默认将不会输出。
log的使用
想要看到上文中ixgbe_logtype_driver 的debug级别日志需要在启动时传入–log-level参数,指定ixgbe_logtype_driver的debug开启。
以testpmd为例子:
./mips-loongson3a-linuxapp-gcc/app/testpmd --log-level=pmd.net.ixgbe.driver:8
则可以看见很多的debug信息被输出。这里的pmd.net.ixgbe.driver就是rte_log_register时传入的名字。
因此,想要看到对应的log,只需要展开二次封装的宏(如上文的PMD_DRV_LOG)找到此条log对应的type名字,在–log-level中传入设置即可
DPDK 18 log日志系统使用相关推荐
- 客户端log日志系统
背景 我们在开发过程中出现了个别bug,而我们往往很难定位到问题所在,这个不仅仅局限于移动端,只是移动端不容易定位问题.我们常见的实现方式可能是, 1. 创建一个带队列的线程. 2. 把要上报的数据抛 ...
- FFmpeg源码分析:log日志系统
FFmpeg的封装专有的log日志系统,支持设置日志等级log level,也支持日志回调log callback,方便开发者调试与排查问题. 1.日志等级 log日志位于libavutil模块,lo ...
- C++ 实现简易 log 日志系统
1.log日志的作用 在软件开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况. 在代码中嵌入log代码信息,主要记录下列信息: (1)记录系统运行异常信息. (2)记录 ...
- LVGL misc log日志系统(lv_log.h)
更多源码分析请访问:LVGL 源码分析大全 LVGL misc log日志系统目录 1.概述 2.API 2.1.日志级别 2.2.日志输出宏 3.使用方法 1.概述 LVGL的日志系统实现比较简单, ...
- C++实现log日志系统
1.log日志的作用 在软件开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况. 在代码中嵌入log代码信息,主要记录下列信息: (1)记录系统运行异常信息. (2)记录 ...
- Android Log日志系统
目录 0. 前言 1. Native的Log写过程解析 2. Socket的另一端Logd 0. 前言 Android中 logd 详解_私房菜的博客-CSDN博客_logd 里面讲了Java层Log ...
- 基于C/C++的log日志记录等级系统
目录 log日志系统初始化 log日志输出 禁止log日志输出 log日志关闭 log日志测试 log日志系统初始化 int logger_init(int loglevel) {time_t now ...
- webserver之日志系统
前言 此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改. 原项目地址:https://github.com/qinguoyi/TinyWebServer Log 日志系 ...
- linux清理日志 hack,Linux系统的LOG日志文件及入侵后日志的清除
UNIX网管员主要是靠系统的LOG,来获得入侵的痕迹.当然也有第三方工具记录入侵系统的 痕迹,UNIX系统存放LOG文件,普通位置如下: /usr/adm - 早期版本的UNIX /var/adm - ...
最新文章
- (C#)AJAX post方式传值
- CI中PHP写法规范(不断更新)
- mysql中影响数据库性能的因素讲解
- [学习笔记]状压dp
- (pytorch-深度学习)语言模型-学习笔记
- 比特币的双花和51%算力攻击
- I2C与SPI通信总线协议
- HCIE-Security Day35:IPSec-NAT-T
- mysql允许虚拟机访问权限_设置虚拟机安装的mysql访问权限及删除mysql
- 移动通信技术的未来发展趋势分析
- 电子电工技术------电阻元件,电感元件与电容元件
- 二进制转换成格雷码的方式
- 产品经理常用的方法论有哪些
- Python标准库文件基本操作以及中文路径问题
- Millumin 3 for mac(专业视频编辑软件)
- QT qmake makefile minGW
- Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码
- 反渗透设备:反渗透纯水设备中软水器的作用及维护方法
- 餐饮收银软件的O2O转型史
- 智慧酒店解决方案-最新全套文件