概述:

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);}
  1. 调用rte_log_register函数为ixgbe注册了名为”pmd.net.ixgbe.init”的日志type
    返回一个int作为此日志的type( ixgbe_logtype_driver是为了方便代码编写,”pmd.net.ixgbe.init”是为了方便用户,他们是一一映射的)。
  2. 随后使用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日志系统使用相关推荐

  1. 客户端log日志系统

    背景 我们在开发过程中出现了个别bug,而我们往往很难定位到问题所在,这个不仅仅局限于移动端,只是移动端不容易定位问题.我们常见的实现方式可能是, 1. 创建一个带队列的线程. 2. 把要上报的数据抛 ...

  2. FFmpeg源码分析:log日志系统

    FFmpeg的封装专有的log日志系统,支持设置日志等级log level,也支持日志回调log callback,方便开发者调试与排查问题. 1.日志等级 log日志位于libavutil模块,lo ...

  3. C++ 实现简易 log 日志系统

    1.log日志的作用 在软件开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况. 在代码中嵌入log代码信息,主要记录下列信息: (1)记录系统运行异常信息. (2)记录 ...

  4. LVGL misc log日志系统(lv_log.h)

    更多源码分析请访问:LVGL 源码分析大全 LVGL misc log日志系统目录 1.概述 2.API 2.1.日志级别 2.2.日志输出宏 3.使用方法 1.概述 LVGL的日志系统实现比较简单, ...

  5. C++实现log日志系统

    1.log日志的作用 在软件开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况. 在代码中嵌入log代码信息,主要记录下列信息: (1)记录系统运行异常信息. (2)记录 ...

  6. Android Log日志系统

    目录 0. 前言 1. Native的Log写过程解析 2. Socket的另一端Logd 0. 前言 Android中 logd 详解_私房菜的博客-CSDN博客_logd 里面讲了Java层Log ...

  7. 基于C/C++的log日志记录等级系统

    目录 log日志系统初始化 log日志输出 禁止log日志输出 log日志关闭 log日志测试 log日志系统初始化 int logger_init(int loglevel) {time_t now ...

  8. webserver之日志系统

    前言 此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改. 原项目地址:https://github.com/qinguoyi/TinyWebServer Log 日志系 ...

  9. linux清理日志 hack,Linux系统的LOG日志文件及入侵后日志的清除

    UNIX网管员主要是靠系统的LOG,来获得入侵的痕迹.当然也有第三方工具记录入侵系统的 痕迹,UNIX系统存放LOG文件,普通位置如下: /usr/adm - 早期版本的UNIX /var/adm - ...

最新文章

  1. (C#)AJAX post方式传值
  2. CI中PHP写法规范(不断更新)
  3. mysql中影响数据库性能的因素讲解
  4. [学习笔记]状压dp
  5. (pytorch-深度学习)语言模型-学习笔记
  6. 比特币的双花和51%算力攻击
  7. I2C与SPI通信总线协议
  8. HCIE-Security Day35:IPSec-NAT-T
  9. mysql允许虚拟机访问权限_设置虚拟机安装的mysql访问权限及删除mysql
  10. 移动通信技术的未来发展趋势分析
  11. 电子电工技术------电阻元件,电感元件与电容元件
  12. 二进制转换成格雷码的方式
  13. 产品经理常用的方法论有哪些
  14. Python标准库文件基本操作以及中文路径问题
  15. Millumin 3 for mac(专业视频编辑软件)
  16. QT qmake makefile minGW
  17. Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码
  18. 反渗透设备:反渗透纯水设备中软水器的作用及维护方法
  19. 餐饮收银软件的O2O转型史
  20. 智慧酒店解决方案-最新全套文件

热门文章

  1. 如何使用CSS实现居中
  2. Java 中参数传递是传值还是引用?
  3. Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
  4. 云服务器与传统服务器的优势差异
  5. {}企业如何才能实现多方位网络营销
  6. 同时在一个WebService服务中发布多个普通Java类
  7. Tree.Panel各项属性
  8. G代码 机器人的CNC实现
  9. 世界坐标系,摄像机坐标系、图像坐标系关系汇总
  10. C/S框架-WebService架构用户凭证(令牌)解决方案