转载自:
在前面所列文章的演示代码中,其实已经展示了一部分记录日志的方式。为了使用方便,在 Easylogging++ 中,通过使用宏的集合来完成日志记录。
普通日志记录
对于普通的日志记录,我们可以选择以下两种比较常用的方式:
LOG(LEVEL)
CLOG(LEVEL, logger ID)
两个宏定义的中 LEVEL 请参看《日志库EasyLogging++学习系列(2)—— 日志级别》,而宏CLOG(CUSTOM LOG)中的 logger ID 可以参看《日志库EasyLogging++学习系列(6)—— 日志记录器》。下面的代码简单演示了如何使用这两个宏:
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP
int main(int argc, char** argv)
{
/// 可以直接使用,不记录任何日志信息
LOG(INFO);
CLOG(INFO, "default");
LOG(INFO) <
CLOG(INFO, "default") <
system("pause");
return 0;
}
通过上面的演示代码可以发现,其实 LOG(LEVEL) 就是 CLOG(LEVEL, "default") 的缩写。不过,如果我们在包含头文件 #include "easylogging++.h" 的代码前面使用另外一个指定的 ID 来定义宏 ELPP_DEFAULT_LOGGER ,那么这个指定的 ID 就会自动地替换掉 "default" 。需要注意的是,这个指定 ID 所标识的日志记录器必须保证使用前已经被注册,否则,将无法正常使用宏 LOG(LEVEL) 来记录日志信息。下面的代码演示这个功能:
#define ELPP_DEFAULT_LOGGER "testlog"
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP
int main(int argc, char** argv)
{
/// 使用前,注册ID为testlog的日志记录器
el::Logger* newLogger = el::Loggers::getLogger("testlog");
LOG(INFO) <
system("pause");
return 0;
}
条件日志记录
条件日志就是只有当满足某一个条件的时候才进行日志记录,否则将忽略记录。下面是记录条件日志的两个宏定义:
LOG_IF(condition, LEVEL)
CLOG_IF(condition, LEVEL, logger ID)
上面两个宏定义中 condition 条件为真时,日志信息才被记录,在某些应用场景下这会显得十分便利,下面的代码演示了条件日志宏定义的用法:
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP
int main(int argc, char** argv)
{
/// 下面这三个日志,只有第一个会输出
LOG_IF(1 == 1, INFO) <
LOG_IF(1 > 2, INFO) <
LOG_IF(1 == 2, DEBUG) <
system("pause");
return 0;
}
偶然日志记录
偶然日志可以分为以下三种常见的情况,具体使用方法请参考示例代码:
每 N 次记录一次日志,对应的宏定义是:LOG_EVERY_N(n, LEVEL) 或者 CLOG_EVERY_N(n, LEVEL, logger ID)
当计数达到 N 次之后