目录
- CLOG_IF 宏
- CPLOG_IF 宏
- CSYSLOG_IF 宏
- LOG_IF 宏
- PLOG_IF 宏
- SYSLOG_IF 宏
- DCLOG_IF 宏
- DCPLOG_IF 宏
- DCSYSLOG_IF 宏
- DLOG_IF 宏
- DPLOG_IF 宏
- DSYSLOG_IF 宏
在上一篇我们介绍完了 easylogging++的 其他基本日志宏,今天我们来看看条件日志宏的实现.
CLOG_IF 宏
宏展开
CLOG_IF
宏定义如下:#define CLOG_IF(condition, LEVEL, ...)\ C##LEVEL##_IF(el::base::Writer, condition, el::base::DispatchAction::NormalLog, __VA_ARGS__)
其中
##
是连字符,__VA_ARGS__
原样替换...Info 日志宏 CLOG_IF(xxx, INFO, xxx)
用个具体的例子就一目了然了:
CLOG_IF(true, INFO, "default");
上面实际展开后为:
CINFO_IF(el::base::Writer, true, el::base::DispatchAction::NormalLog, "default");
CINFO_IF
也是一个宏:#if ELPP_INFO_LOG #define CINFO_IF(writer, condition_, dispatchAction, ...) \ ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Info, dispatchAction, __VA_ARGS__) #else #define CINFO_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter() #endif // ELPP_INFO_LOG
ELPP_INFO_LOG
宏和el::base::NullWriter
类在CLOG
宏展开 中已经介绍过了,这里就不多说了。
这里我们直接看ELPP_INFO_LOG
宏值为 1 的情况:ELPP_WRITE_LOG_IF(el::base::Writer, (true), el::Level::Info, el::base::DispatchAction::NormalLog, "default");
ELPP_WRITE_LOG_IF
也是一个宏:#define ELPP_WRITE_LOG_IF(writer, condition, level, dispatchAction, ...) \ if (condition) \ writer(level, __FILE__, __LINE__, ELPP_FUNC, dispatchAction).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
展开后相当于:
if (true) el::base::Writer(el::Level::Info, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(el_getVALength("default"), "default");
el_getVALength
宏在CLOG
宏展开 中已经详细分析过了,表示可变参的数目,这里el_getVALength("default")
值为 1,再次替换后:if (true) el::base::Writer(el::Level::Info, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
其他日志级别宏的展开类似。
Trace 日志宏 CLOG_IF(xxx, TRACE, xxx)
用个具体的例子就一目了然了:
CLOG_IF(true, TRACE, "default");
上面实际展开后为:
CTRACE_IF(el::base::Writer, true, el::base::DispatchAction::NormalLog, "default");
CTRACE_IF
也是一个宏:#if ELPP_TRACE_LOG #define CTRACE_IF(writer, condition_, dispatchAction, ...) \ ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Trace, dispatchAction, __VA_ARGS__) #else #define CTRACE_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter() #endif // ELPP_TRACE_LOG
ELPP_TRACE_LOG
宏和el::base::NullWriter
类在CLOG
宏展开 中已经仔细介绍过了,这里就不多说了。
这里我们直接看ELPP_TRACE_LOG
宏值为 1 的情况:ELPP_WRITE_LOG_IF(el::base::Writer, (true), el::Level::Trace, el::base::DispatchAction::NormalLog, "default");
ELPP_WRITE_LOG_IF
宏在前面Info
日志级别已经介绍过了,这里直接展开:if (true) el::base::Writer(el::Level::Trace, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(el_getVALength("default"), "default");
el_getVALength
宏前面多次介绍了,表示可变参的数目,这里el_getVALength("default")
值为 1,再次替换后:if (true) el::base::Writer(el::Level::Trace, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Debug 日志宏 CLOG_IF(xxx, DEBUG, xxx)
用个具体的例子就一目了然了:
CLOG_IF(true, DEBUG, "default");
上面实际展开后为:
CDEBUG_IF(el::base::Writer, true, el::base::DispatchAction::NormalLog, "default");
CDEBUG_IF
也是一个宏:#if ELPP_DEBUG_LOG #define CDEBUG_IF(writer, condition_, dispatchAction, ...) \ ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Debug, dispatchAction, __VA_ARGS__) #else #define CDEBUG_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter() #endif // ELPP_DEBUG_LOG
ELPP_DEBUG_LOG
宏和el::base::NullWriter
类在CLOG
宏展开 中已经仔细介绍过了,这里就不多说了。
这里我们直接看ELPP_DEBUG_LOG
宏值为 1 的情况:ELPP_WRITE_LOG_IF(el::base::Writer, (true), el::Level::Debug, el::base::DispatchAction::NormalLog, "default");
ELPP_WRITE_LOG_IF
宏在前面Info
日志级别已经介绍过了,这里直接展开:if (true) el::base::Writer(el::Level::Debug, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(el_getVALength("default"), "default");
el_getVALength
宏前面多次介绍了,表示可变参的数目,这里el_getVALength("default")
值为 1,再次替换后:if (true) el::base::Writer(el::Level::Debug, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Fatal 日志宏 CLOG_IF(xxx, FATAL, xxx)
用个具体的例子就一目了然了:
CLOG_IF(true, FATAL, "default");
上面实际展开后为:
CFATAL_IF(el::base::Writer, true, el::base::DispatchAction::NormalLog, "default");
CFATAL_IF
也是一个宏:#if ELPP_FATAL_LOG #define CFATAL_IF(writer, condition_, dispatchAction, ...) \ ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Fatal, dispatchAction, __VA_ARGS__) #else #define CFATAL_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter() #endif // ELPP_FATAL_LOG
ELPP_FATAL_LOG
宏和el::base::NullWriter
类在CLOG
宏展开 中已经仔细介绍过了,这里就不多说了。
这里我们直接看ELPP_FATAL_LOG
宏值为 1 的情况:ELPP_WRITE_LOG_IF(el::base::Writer, (true), el::Level::Fatal, el::base::DispatchAction::NormalLog, "default");
ELPP_WRITE_LOG_IF
宏在前面Info
日志级别已经介绍过了,这里直接展开:if (true) el::base::Writer(el::Level::Fatal, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(el_getVALength("default"), "default");
el_getVALength
宏前面多次介绍了,表示可变参的数目,这里el_getVALength("default")
值为 1,再次替换后:if (true) el::base::Writer(el::Level::Fatal, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Error 日志宏 CLOG_IF(xxx, ERROR, xxx)
用个具体的例子就一目了然了:
CLOG_IF(true, ERROR, "default");
上面实际展开后为:
CERROR_IF(el::base::Writer, true, el::base::DispatchAction::NormalLog, "default");
CERROR_IF
也是一个宏:#if ELPP_ERROR_LOG #define CFATAL_IF(writer, condition_, dispatchAction, ...) \ ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Error, dispatchAction, __VA_ARGS__) #else #define CDEBUG_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter() #endif // ELPP_ERROR_LOG
ELPP_ERROR_LOG
宏和el::base::NullWriter
类在CLOG
宏展开 中已经仔细介绍过了,这里就不多说了。
这里我们直接看ELPP_ERROR_LOG
宏值为 1 的情况:ELPP_WRITE_LOG_IF(el::base::Writer, (true), el::Level::Error, el::base::DispatchAction::NormalLog, "default");
ELPP_WRITE_LOG_IF
宏在前面Info
日志级别已经介绍过了,这里直接展开:if (true) el::base::Writer(el::Level::Error, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(el_getVALength("default"), "default");
el_getVALength
宏前面多次介绍了,表示可变参的数目,这里el_getVALength("default")
值为 1,再次替换后:if (true) el::base::Writer(el::Level::Error, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Warning 日志宏 CLOG_IF(xxx, WARNING, xxx)
用个具体的例子就一目了然了:
CLOG_IF(true, WARNING, "default");
上面实际展开后为:
CWARNING_IF(el::base::Writer, true, el::base::DispatchAction::NormalLog, "default");
CWARNING_IF
也是一个宏:#if ELPP_WARNING_LOG #define CWARNING_IF(writer, condition_, dispatchAction, ...) \ ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Warning, dispatchAction, __VA_ARGS__) #else #define CWARNING_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter() #endif // ELPP_WARNING_LOG
ELPP_WARNING_LOG
宏和el::base::NullWriter
类在CLOG
宏展开 中已经仔细介绍过了,这里就不多说了。
这里我们直接看ELPP_WARNING_LOG
宏值为 1 的情况:ELPP_WRITE_LOG_IF(el::base::Writer, (true), el::Level::Warning, el::base::DispatchAction::NormalLog, "default");
ELPP_WRITE_LOG_IF
宏在前面Info
日志级别已经介绍过了,这里直接展开:if (true) el::base::Writer(el::Level::Warning, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(el_getVALength("default"), "default");
el_getVALength
宏前面多次介绍了,表示可变参的数目,这里el_getVALength("default")
值为 1,再次替换后:if (true) el::base::Writer(el::Level::Warning, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
源码分析
从上面所有用户日志相关日志级别宏的最终展开结果可以看到: 都是创建了
el::base::Writer
类的实例,还是个临时对象。
Writer
类我们在CLOG
宏 Writer 对象的创建以及初始化、日志输出、日志信息的保存 已经仔细介绍过了,这里就不多说了。
CPLOG_IF 宏
宏展开
CPLOG_IF
宏定义如下:#define CPLOG_IF(condition, LEVEL, ...) \ C##LEVEL##_IF(el::base::PErrorWriter, condition, el::base::DispatchAction::NormalLog, __VA_ARGS__)
其中
##
是连字符,__VA_ARGS__
原样替换...
C##LEVEL##_IF
相关宏前面已经多次分析过了,这里简单看看最终展开后的结果:Info 日志宏 CPLOG_IF(xxx, INFO, xxx)
用个具体的例子就一目了然了:
CPLOG_IF(true, INFO, "default");
最终展开后为:
if (true) el::base::PErrorWriter(el::Level::Info, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Trace 日志宏 CPLOG_IF(xxx, TRACE, XXX)
用个具体的例子就一目了然了:
CPLOG_IF(true, TRACE, "default");
最终展开为:
if (true) el::base::PErrorWriter(el::Level::Trace, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Debug 日志宏 CPLOG_IF(xxx, DEBUG, XXX)
用个具体的例子就一目了然了:
CPLOG_IF(true, DEBUG, "default");
最终展开为:
if (true) el::base::PErrorWriter(el::Level::Debug, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Fatal 日志宏 CPLOG_IF(xxx, FATAL, XXX)
用个具体的例子就一目了然了:
CPLOG_IF(true, FATAL, "default");
最终展开为:
if (true) el::base::PErrorWriter(el::Level::Fatal, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Error 日志宏 CPLOG_IF(xxx, ERROR, XXX)
用个具体的例子就一目了然了:
CPLOG_IF(true, ERROR, "default");
最终展开为:
if (true) el::base::PErrorWriter(el::Level::Error, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Warning 日志宏 CPLOG_IF(xxx, WARNING, XXX)
用个具体的例子就一目了然了:
CPLOG_IF(true, WARNING, "default");
最终展开为:
if (true) el::base::PErrorWriter(el::Level::Warning, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
源码剖析
从上面所有用户日志相关日志级别宏的最终展开结果可以看到: 都是创建了
el::base::PErrorWriter
类的实例,还是个临时对象。
el::base::PErrorWriter
类在 其他基本日志宏 中已经仔细介绍过了,这里就不多说了。
CSYSLOG_IF 宏
宏展开
CSYSLOG_IF
宏定义如下:#define CSYSLOG_IF(condition, LEVEL, ...) \ C##LEVEL##_IF(el::base::Writer, condition, el::base::DispatchAction::SysLog, __VA_ARGS__)
其中
##
是连字符,__VA_ARGS__
原样替换...
C##LEVEL##_IF
相关宏前面已经多次分析过了,这里简单看看最终展开后的结果Info 日志宏 CSYSLOG_IF(xxx, INFO, xxx)
用个具体的例子就一目了然了:
CSYSLOG_IF(true, INFO, "default");
最终展开后为:
if (true) el::base::Writer(el::Level::Info, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Trace 日志宏 CSYSLOG_IF(xxx, TRACE, XXX)
用个具体的例子就一目了然了:
CSYSLOG_IF(true, TRACE, "default");
最终展开为:
if (true) el::base::Writer(el::Level::Trace, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Debug 日志宏 CSYSLOG_IF(xxx, DEBUG, XXX)
用个具体的例子就一目了然了:
CSYSLOG_IF(true, DEBUG, "default");
最终展开为:
if (true) el::base::Writer(el::Level::Debug, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Fatal 日志宏 CSYSLOG_IF(xxx, FATAL, XXX)
用个具体的例子就一目了然了:
CSYSLOG_IF(true, FATAL, "default");
最终展开为:
if (true) el::base::Writer(el::Level::Fatal, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Error 日志宏 CSYSLOG_IF(xxx, ERROR, XXX)
用个具体的例子就一目了然了:
CSYSLOG_IF(true, ERROR, "default");
最终展开为:
if (true) el::base::Writer(el::Level::Error, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
Warning 日志宏 CSYSLOG_IF(xxx, WARNING, XXX)
用个具体的例子就一目了然了:
CSYSLOG_IF(true, WARNING, "default");
最终展开为:
if (true) el::base::Writer(el::Level::Warning, __FILE__, __LINE__, ELPP_FUNC, el::base::DispatchAction::NormalLog).construct(1, "default");
源码剖析
从上面所有用户日志相关日志级别宏的最终展开结果可以看到: 都是创建了
el::base::Writer
类的实例,还是个临时对象。
el::base::Writer
类我们在CLOG
宏 Writer 对象的创建以及初始化、日志输出、日志信息的保存 中已经仔细介绍过了,这里就不多说了。
LOG_IF 宏
LOG_IF
宏定义如下:#define LOG_IF(condition, LEVEL) CLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
CLOG_IF
宏在前面已经仔细介绍过了。
PLOG_IF 宏
PLOG_IF
宏定义如下:#define PLOG_IF(condition, LEVEL) CPLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
CPLOG_IF
宏在前面已经仔细介绍过了。
SYSLOG_IF 宏
SYSLOG_IF
宏定义如下:#define SYSLOG_IF(condition, LEVEL) CSYSLOG_IF(condition, LEVEL, el::base::consts::kSysLogLoggerId)
CSYSLOG_IF
宏在前面已经仔细介绍过了。
DCLOG_IF 宏
DCLOG_IF
宏定义如下:#define DCLOG_IF(condition, LEVEL, ...) if (ELPP_DEBUG_LOG) CLOG_IF(condition, LEVEL, __VA_ARGS__)
CLOG_IF
宏在前面已经仔细介绍过了,这里就不多说了。
DCPLOG_IF 宏
DCPLOG_IF
宏定义如下:#define DCPLOG_IF(condition, LEVEL, ...) \ C##LEVEL##_IF(el::base::PErrorWriter, (ELPP_DEBUG_LOG) && (condition), el::base::DispatchAction::NormalLog, __VA_ARGS__)
ELPP_DEBUG_LOG
宏和C##LEVEL##_IF
相关宏在前面已经仔细介绍过了。
DCSYSLOG_IF 宏
DCSYSLOG_IF
宏定义如下:#define DCSYSLOG_IF(condition, LEVEL, ...)\ C##LEVEL##_IF(el::base::Writer, (ELPP_DEBUG_LOG) && (condition), el::base::DispatchAction::SysLog, __VA_ARGS__)
ELPP_DEBUG_LOG
宏和C##LEVEL##_IF
相关宏在前面已经仔细介绍过了。
DLOG_IF 宏
DLOG_IF
宏定义如下:#define DLOG_IF(condition, LEVEL) DCLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
DCLOG_IF
宏在前面已经仔细介绍过了。
DPLOG_IF 宏
DPLOG_IF
宏宏定义如下:#define DPLOG_IF(condition, LEVEL) DCPLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
DCPLOG_IF
宏在前面已经仔细介绍过了。
DSYSLOG_IF 宏
DSYSLOG_IF
宏定义如下:#define DSYSLOG_IF(condition, LEVEL) DCSYSLOG_IF(condition, LEVEL, el::base::consts::kSysLogLoggerId)
DCSYSLOG_IF
宏在前面已经仔细介绍过了。
至此 easylogging++的条件日志宏就全部介绍完了,下一篇我们开始介绍偶尔日志宏。
标签:__,el,++,default,源码,base,日志,true,ELPP From: https://www.cnblogs.com/DesignLife/p/16931218.html