在Cmake中关闭log4cplus

问题描述:项目中需要利用测试工具追踪程序中的热点,进而找出程序中占用cpu time最多的代码段。测试结果发现log4cplus的接口调用(程序中使用log4cplus作为日志系统)消耗cpu time占用总耗时的一半,导致程序本身函数占用耗时比例不准确。解决方案,关闭log4cplus在程序中的调用。

分析:先来看LOG4CPLUS_DEBUG()在头文件中的宏定义:

#if !defined(LOG4CPLUS_DISABLE_DEBUG)
#define LOG4CPLUS_DEBUG(logger, logEvent)                               \
    LOG4CPLUS_MACRO_BODY (logger, logEvent, DEBUG_LOG_LEVEL)
#define LOG4CPLUS_DEBUG_STR(logger, logEvent)                           \
    LOG4CPLUS_MACRO_STR_BODY (logger, logEvent, DEBUG_LOG_LEVEL)

#if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
#define LOG4CPLUS_DEBUG_FMT(logger, logFmt, ...)                            \
    LOG4CPLUS_MACRO_FMT_BODY (logger, DEBUG_LOG_LEVEL, logFmt, __VA_ARGS__)
#elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
#define LOG4CPLUS_DEBUG_FMT(logger, logFmt, logArgs...)                     \
    LOG4CPLUS_MACRO_FMT_BODY(logger, DEBUG_LOG_LEVEL, logFmt, logArgs)
#endif

#else
#define LOG4CPLUS_DEBUG(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
#define LOG4CPLUS_DEBUG_STR(logger, logEvent) LOG4CPLUS_DOWHILE_NOTHING()
#if defined (LOG4CPLUS_HAVE_C99_VARIADIC_MACROS)
#define LOG4CPLUS_DEBUG_FMT(logger, logFmt, ...) LOG4CPLUS_DOWHILE_NOTHING()
#elif defined (LOG4CPLUS_HAVE_GNU_VARIADIC_MACROS)
#define LOG4CPLUS_DEBUG_FMT(logger, logFmt, logArgs...) LOG4CPLUS_DOWHILE_NOTHING()
#endif

可以发现,通过加上宏定义LOG4CPLUS_DISABLE_DEBUG即可使LOG4CPLUS_DEBUG()在编译阶段被编译成LOG4CPLUS_DOWHILE_NOTHING(),再来看LOG4CPLUS_DOWHILE_NOTHING()在头文件中的定义:

#define LOG4CPLUS_DOWHILE_NOTHING()                 \
    LOG4CPLUS_SUPPRESS_DOWHILE_WARNING()            \
    do { } while (0)                                \
    LOG4CPLUS_RESTORE_DOWHILE_WARNING()
#define LOG4CPLUS_SUPPRESS_DOWHILE_WARNING() /* empty */
#define LOG4CPLUS_RESTORE_DOWHILE_WARNING() /* empty */

LOG4CPLUS_DOWHILE_NOTHING()实际上只执行 do { } while (0),消耗的cpu time几乎可以忽略。
其他级别的API也是同样道理。

查看资料,
这里写图片描述

发现,在编译时加上这些宏即可。

解决方法:
在程序cmakelist中加上这些宏定义:
add_definitions(-DLOG4CPLUS_DISABLE_FATAL, -DLOG4CPLUS_DISABLE_WARN, -DLOG4CPLUS_DISABLE_ERROR, -DLOG4CPLUS_DISABLE_INFO, -DLOG4CPLUS_DISABLE_DEBUG, -DLOG4CPLUS_DISABLE_TRACE)
再次运行,问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值