linux 和dpdk log使用方法

时间:2024-04-01 17:41:31

       在排查问题时,看log尤为重要,可以清楚地看到流程走到哪一步。一个log系统设置是否合理直接影响到问题的定位的效率。

  • dpdk日志系统

1、根据级别和类型对日志信息进行过滤

       根据日志信息的优先级高低,dpdk将日志信息分为8个级别,其中RTE_LOG_DEBUG的值为8,代码log级别小于当前系统log级别,才会输出。dpdk支持的日志等级如下(参考具体的dpdk版本):

/* these log types can be used in an application */

#define RTE_LOGTYPE_USER1     24 /**< User-defined log type 1. */

#define RTE_LOGTYPE_USER2     25 /**< User-defined log type 2. */

#define RTE_LOGTYPE_USER3     26 /**< User-defined log type 3. */

#define RTE_LOGTYPE_USER4     27 /**< User-defined log type 4. */

#define RTE_LOGTYPE_USER5     28 /**< User-defined log type 5. */

#define RTE_LOGTYPE_USER6     29 /**< User-defined log type 6. */

#define RTE_LOGTYPE_USER7     30 /**< User-defined log type 7. */

#define RTE_LOGTYPE_USER8     31 /**< User-defined log type 8. */

       log类型可以指定只输出哪一模块的日志信息,使用bitmap来配置,当对应的位置1并且日志等级满足上述才会输出,dpdk定义的log类型如下:

/* SDK log type */

#define RTE_LOGTYPE_EAL        0 /**< Log related to eal. */

#define RTE_LOGTYPE_MALLOC     1 /**< Log related to malloc. */

#define RTE_LOGTYPE_RING       2 /**< Log related to ring. */

#define RTE_LOGTYPE_MEMPOOL    3 /**< Log related to mempool. */

#define RTE_LOGTYPE_TIMER      4 /**< Log related to timers. */

#define RTE_LOGTYPE_PMD        5 /**< Log related to poll mode driver. */

#define RTE_LOGTYPE_HASH       6 /**< Log related to hash table. */

#define RTE_LOGTYPE_LPM        7 /**< Log related to LPM. */

#define RTE_LOGTYPE_KNI        8 /**< Log related to KNI. */

#define RTE_LOGTYPE_ACL        9 /**< Log related to ACL. */

#define RTE_LOGTYPE_POWER     10 /**< Log related to power. */

#define RTE_LOGTYPE_METER     11 /**< Log related to QoS meter. */

#define RTE_LOGTYPE_SCHED     12 /**< Log related to QoS port scheduler. */

#define RTE_LOGTYPE_PORT      13 /**< Log related to port. */

#define RTE_LOGTYPE_TABLE     14 /**< Log related to table. */

#define RTE_LOGTYPE_PIPELINE  15 /**< Log related to pipeline. */

#define RTE_LOGTYPE_MBUF      16 /**< Log related to mbuf. */

#define RTE_LOGTYPE_CRYPTODEV 17 /**< Log related to cryptodev. */

#define RTE_LOGTYPE_EFD       18 /**< Log related to EFD. */

#define RTE_LOGTYPE_EVENTDEV  19 /**< Log related to eventdev

2、用户自定义

       用户可以根据自己的定义来输出,体现对用户友好。Dpdk留给用户8个可由用户自定义的log类型:

/* these log types can be used in an application */

#define RTE_LOGTYPE_USER1     24 /**< User-defined log type 1. */

#define RTE_LOGTYPE_USER2     25 /**< User-defined log type 2. */

#define RTE_LOGTYPE_USER3     26 /**< User-defined log type 3. */

#define RTE_LOGTYPE_USER4     27 /**< User-defined log type 4. */

#define RTE_LOGTYPE_USER5     28 /**< User-defined log type 5. */

#define RTE_LOGTYPE_USER6     29 /**< User-defined log type 6. */

#define RTE_LOGTYPE_USER7     30 /**< User-defined log type 7. */

#define RTE_LOGTYPE_USER8     31 /**< User-defined log type 8. */

3、支持syslog

       syslogLinux系统中功能比较完善的log工具,Linux系统中的服务基本都使用syslog记录自己的日志信息。其所记录的日志一般在/var/log目录中。dpdklog系统除了按照自己的方式处理日志之外,还会根据命令行的选项将日志写入syslog.conf配置的日志文件中(syslog相关信息可参考man手册)。

4、代码中使用log

(1)通过命令行指定等级:--log-level

(2)设置日志类型:rte_set_log_type()

(3)打印log: RTE_LOG(l, t, ...)

(4)用户自定义:#define RTE_LOGTYPE_***   RTE_LOGTYPE_USER1

(5)将输出定义到指定文件:f=fopen() rte_openlog_stream(f)

(6)设置某个模块的等级:rte_log_set_level()

(7)设置全局等级rte_log_set_global_level()

 

  • linux日志系统

1、只有日志优先级

linux 和dpdk log使用方法

2、相关日志在/var/log下面

3、实用工具:logrotate

可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件