Skip to content
Snippets Groups Projects
easylogging++.h 278 KiB
Newer Older
  • Learn to ignore specific revisions
  • Radim Vavřík's avatar
    Radim Vavřík committed
    6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345
    #define CVLOG_EVERY_N(n, vlevel, ...)\
        CVERBOSE_EVERY_N(el::base::Writer, n, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define CLOG_AFTER_N(n, LEVEL, ...)\
        C##LEVEL##_AFTER_N(el::base::Writer, n, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define CVLOG_AFTER_N(n, vlevel, ...)\
        CVERBOSE_AFTER_N(el::base::Writer, n, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define CLOG_N_TIMES(n, LEVEL, ...)\
        C##LEVEL##_N_TIMES(el::base::Writer, n, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define CVLOG_N_TIMES(n, vlevel, ...)\
        CVERBOSE_N_TIMES(el::base::Writer, n, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    //
    // Default Loggers macro using CLOG(), CLOG_VERBOSE() and CVLOG() macros
    //
    // undef existing
    #undef LOG
    #undef VLOG
    #undef LOG_IF
    #undef VLOG_IF
    #undef LOG_EVERY_N
    #undef VLOG_EVERY_N
    #undef LOG_AFTER_N
    #undef VLOG_AFTER_N
    #undef LOG_N_TIMES
    #undef VLOG_N_TIMES
    #undef _CURRENT_FILE_LOGGER_ID
    #if defined(_LOGGER)
    #   define _CURRENT_FILE_LOGGER_ID _LOGGER
    #else
    #   define _CURRENT_FILE_LOGGER_ID el::base::consts::kDefaultLoggerId
    #endif
    #undef _TRACE
    #define _TRACE CLOG(TRACE, _CURRENT_FILE_LOGGER_ID)
    // Normal logs
    #define LOG(LEVEL) CLOG(LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define VLOG(vlevel) CVLOG(vlevel, _CURRENT_FILE_LOGGER_ID)
    // Conditional logs
    #define LOG_IF(condition, LEVEL) CLOG_IF(condition, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define VLOG_IF(condition, vlevel) CVLOG_IF(condition, vlevel, _CURRENT_FILE_LOGGER_ID)
    // Hit counts based logs
    #define LOG_EVERY_N(n, LEVEL) CLOG_EVERY_N(n, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define VLOG_EVERY_N(n, vlevel) CVLOG_EVERY_N(n, vlevel, _CURRENT_FILE_LOGGER_ID)
    #define LOG_AFTER_N(n, LEVEL) CLOG_AFTER_N(n, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define VLOG_AFTER_N(n, vlevel) CVLOG_AFTER_N(n, vlevel, _CURRENT_FILE_LOGGER_ID)
    #define LOG_N_TIMES(n, LEVEL) CLOG_N_TIMES(n, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define VLOG_N_TIMES(n, vlevel) CVLOG_N_TIMES(n, vlevel, _CURRENT_FILE_LOGGER_ID)
    // Generic PLOG()
    #undef CPLOG
    #undef CPLOG_IF
    #undef PLOG
    #undef PLOG_IF
    #undef DCPLOG
    #undef DCPLOG_IF
    #undef DPLOG
    #undef DPLOG_IF
    #define CPLOG(LEVEL, ...)\
        C##LEVEL(el::base::PErrorWriter, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define CPLOG_IF(condition, LEVEL, ...)\
        C##LEVEL##_IF(el::base::PErrorWriter, condition, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define DCPLOG(LEVEL, ...)\
        if (_ELPP_DEBUG_LOG) C##LEVEL(el::base::PErrorWriter, el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define DCPLOG_IF(condition, LEVEL, ...)\
        C##LEVEL##_IF(el::base::PErrorWriter, (_ELPP_DEBUG_LOG) && (condition), el::base::DispatchAction::NormalLog, __VA_ARGS__)
    #define PLOG(LEVEL) CPLOG(LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define PLOG_IF(condition, LEVEL) CPLOG_IF(condition, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DPLOG(LEVEL) DCPLOG(LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DPLOG_IF(condition, LEVEL) DCPLOG_IF(condition, LEVEL, _CURRENT_FILE_LOGGER_ID)
    // Generic SYSLOG()
    #undef CSYSLOG
    #undef CSYSLOG_IF
    #undef CSYSLOG_EVERY_N
    #undef CSYSLOG_AFTER_N
    #undef CSYSLOG_N_TIMES
    #undef SYSLOG
    #undef SYSLOG_IF
    #undef SYSLOG_EVERY_N
    #undef SYSLOG_AFTER_N
    #undef SYSLOG_N_TIMES
    #undef DCSYSLOG
    #undef DCSYSLOG_IF
    #undef DCSYSLOG_EVERY_N
    #undef DCSYSLOG_AFTER_N
    #undef DCSYSLOG_N_TIMES
    #undef DSYSLOG
    #undef DSYSLOG_IF
    #undef DSYSLOG_EVERY_N
    #undef DSYSLOG_AFTER_N
    #undef DSYSLOG_N_TIMES
    #if defined(_ELPP_SYSLOG)
    #   define CSYSLOG(LEVEL, ...)\
            C##LEVEL(el::base::Writer, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define CSYSLOG_IF(condition, LEVEL, ...)\
            C##LEVEL##_IF(el::base::Writer, condition, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define CSYSLOG_EVERY_N(n, LEVEL, ...) C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define CSYSLOG_AFTER_N(n, LEVEL, ...) C##LEVEL##_AFTER_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define CSYSLOG_N_TIMES(n, LEVEL, ...) C##LEVEL##_N_TIMES(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define SYSLOG(LEVEL) CSYSLOG(LEVEL, el::base::consts::kSysLogLoggerId)
    #   define SYSLOG_IF(condition, LEVEL) CSYSLOG_IF(condition, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define SYSLOG_EVERY_N(n, LEVEL) CSYSLOG_EVERY_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define SYSLOG_AFTER_N(n, LEVEL) CSYSLOG_AFTER_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define SYSLOG_N_TIMES(n, LEVEL) CSYSLOG_N_TIMES(n, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define DCSYSLOG(LEVEL, ...) if (_ELPP_DEBUG_LOG) C##LEVEL(el::base::Writer, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define DCSYSLOG_IF(condition, LEVEL, ...)\
            C##LEVEL##_IF(el::base::Writer, (_ELPP_DEBUG_LOG) && (condition), el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define DCSYSLOG_EVERY_N(n, LEVEL, ...)\
            if (_ELPP_DEBUG_LOG) C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define DCSYSLOG_AFTER_N(n, LEVEL, ...)\
            if (_ELPP_DEBUG_LOG) C##LEVEL##_AFTER_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define DCSYSLOG_N_TIMES(n, LEVEL, ...)\
            if (_ELPP_DEBUG_LOG) C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
    #   define DSYSLOG(LEVEL) DCSYSLOG(LEVEL, el::base::consts::kSysLogLoggerId)
    #   define DSYSLOG_IF(condition, LEVEL) DCSYSLOG_IF(condition, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define DSYSLOG_EVERY_N(n, LEVEL) DCSYSLOG_EVERY_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define DSYSLOG_AFTER_N(n, LEVEL) DCSYSLOG_AFTER_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
    #   define DSYSLOG_N_TIMES(n, LEVEL) DCSYSLOG_N_TIMES(n, LEVEL, el::base::consts::kSysLogLoggerId)
    #else
    #   define CSYSLOG(LEVEL, ...) el::base::NullWriter()
    #   define CSYSLOG_IF(condition, LEVEL, ...) el::base::NullWriter()
    #   define CSYSLOG_EVERY_N(n, LEVEL, ...) el::base::NullWriter()
    #   define CSYSLOG_AFTER_N(n, LEVEL, ...) el::base::NullWriter()
    #   define CSYSLOG_N_TIMES(n, LEVEL, ...) el::base::NullWriter()
    #   define SYSLOG(LEVEL) el::base::NullWriter()
    #   define SYSLOG_IF(condition, LEVEL) el::base::NullWriter()
    #   define SYSLOG_EVERY_N(n, LEVEL) el::base::NullWriter()
    #   define SYSLOG_AFTER_N(n, LEVEL) el::base::NullWriter()
    #   define SYSLOG_N_TIMES(n, LEVEL) el::base::NullWriter()
    #   define DCSYSLOG(LEVEL, ...) el::base::NullWriter()
    #   define DCSYSLOG_IF(condition, LEVEL, ...) el::base::NullWriter()
    #   define DCSYSLOG_EVERY_N(n, LEVEL, ...) el::base::NullWriter()
    #   define DCSYSLOG_AFTER_N(n, LEVEL, ...) el::base::NullWriter()
    #   define DCSYSLOG_N_TIMES(n, LEVEL, ...) el::base::NullWriter()
    #   define DSYSLOG(LEVEL) el::base::NullWriter()
    #   define DSYSLOG_IF(condition, LEVEL) el::base::NullWriter()
    #   define DSYSLOG_EVERY_N(n, LEVEL) el::base::NullWriter()
    #   define DSYSLOG_AFTER_N(n, LEVEL) el::base::NullWriter()
    #   define DSYSLOG_N_TIMES(n, LEVEL) el::base::NullWriter()
    #endif  // defined(_ELPP_SYSLOG)
    //
    // Custom Debug Only Loggers - Requires (level, loggerId/s)
    //
    // undef existing
    #undef DCLOG
    #undef DCVLOG
    #undef DCLOG_IF
    #undef DCVLOG_IF
    #undef DCLOG_EVERY_N
    #undef DCVLOG_EVERY_N
    #undef DCLOG_AFTER_N
    #undef DCVLOG_AFTER_N
    #undef DCLOG_N_TIMES
    #undef DCVLOG_N_TIMES
    // Normal logs
    #define DCLOG(LEVEL, ...) if (_ELPP_DEBUG_LOG) CLOG(LEVEL, __VA_ARGS__)
    #define DCLOG_VERBOSE(vlevel, ...) if (_ELPP_DEBUG_LOG) CLOG_VERBOSE(vlevel, __VA_ARGS__)
    #define DCVLOG(vlevel, ...) if (_ELPP_DEBUG_LOG) CVLOG(vlevel, __VA_ARGS__)
    // Conditional logs
    #define DCLOG_IF(condition, LEVEL, ...) if (_ELPP_DEBUG_LOG) CLOG_IF(condition, LEVEL, __VA_ARGS__)
    #define DCVLOG_IF(condition, vlevel, ...) if (_ELPP_DEBUG_LOG) CVLOG_IF(condition, vlevel, __VA_ARGS__)
    // Hit counts based logs
    #define DCLOG_EVERY_N(n, LEVEL, ...) if (_ELPP_DEBUG_LOG) CLOG_EVERY_N(n, LEVEL, __VA_ARGS__)
    #define DCVLOG_EVERY_N(n, vlevel, ...) if (_ELPP_DEBUG_LOG) CVLOG_EVERY_N(n, vlevel, __VA_ARGS__)
    #define DCLOG_AFTER_N(n, LEVEL, ...) if (_ELPP_DEBUG_LOG) CLOG_AFTER_N(n, LEVEL, __VA_ARGS__)
    #define DCVLOG_AFTER_N(n, vlevel, ...) if (_ELPP_DEBUG_LOG) CVLOG_AFTER_N(n, vlevel, __VA_ARGS__)
    #define DCLOG_N_TIMES(n, LEVEL, ...) if (_ELPP_DEBUG_LOG) CLOG_N_TIMES(n, LEVEL, __VA_ARGS__)
    #define DCVLOG_N_TIMES(n, vlevel, ...) if (_ELPP_DEBUG_LOG) CVLOG_N_TIMES(n, vlevel, __VA_ARGS__)
    //
    // Default Debug Only Loggers macro using CLOG(), CLOG_VERBOSE() and CVLOG() macros
    //
    // undef existing
    #undef DLOG
    #undef DVLOG
    #undef DLOG_IF
    #undef DVLOG_IF
    #undef DLOG_EVERY_N
    #undef DVLOG_EVERY_N
    #undef DLOG_AFTER_N
    #undef DVLOG_AFTER_N
    #undef DLOG_N_TIMES
    #undef DVLOG_N_TIMES
    // Normal logs
    #define DLOG(LEVEL) DCLOG(LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DVLOG(vlevel) DCVLOG(vlevel, _CURRENT_FILE_LOGGER_ID)
    // Conditional logs
    #define DLOG_IF(condition, LEVEL) DCLOG_IF(condition, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DVLOG_IF(condition, vlevel) DCVLOG_IF(condition, vlevel, _CURRENT_FILE_LOGGER_ID)
    // Hit counts based logs
    #define DLOG_EVERY_N(n, LEVEL) DCLOG_EVERY_N(n, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DVLOG_EVERY_N(n, vlevel) DCVLOG_EVERY_N(n, vlevel, _CURRENT_FILE_LOGGER_ID)
    #define DLOG_AFTER_N(n, LEVEL) DCLOG_AFTER_N(n, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DVLOG_AFTER_N(n, vlevel) DCVLOG_AFTER_N(n, vlevel, _CURRENT_FILE_LOGGER_ID)
    #define DLOG_N_TIMES(n, LEVEL) DCLOG_N_TIMES(n, LEVEL, _CURRENT_FILE_LOGGER_ID)
    #define DVLOG_N_TIMES(n, vlevel) DCVLOG_N_TIMES(n, vlevel, _CURRENT_FILE_LOGGER_ID)
    // Check macros
    #undef CCHECK
    #undef CPCHECK
    #undef CCHECK_EQ
    #undef CCHECK_NE
    #undef CCHECK_LT
    #undef CCHECK_GT
    #undef CCHECK_LE
    #undef CCHECK_GE
    #undef CCHECK_NOTNULL
    #undef CCHECK_STRCASEEQ
    #undef CCHECK_STRCASENE
    #undef CHECK
    #undef PCHECK
    #undef CHECK_EQ
    #undef CHECK_NE
    #undef CHECK_LT
    #undef CHECK_GT
    #undef CHECK_LE
    #undef CHECK_GE
    #undef CHECK_NOTNULL
    #undef CHECK_STRCASEEQ
    #undef CHECK_STRCASENE
    #define CCHECK(condition, ...) CLOG_IF(!(condition), FATAL, __VA_ARGS__) << "Check failed: [" << #condition << "] "
    #define CPCHECK(condition, ...) CPLOG_IF(!(condition), FATAL, __VA_ARGS__) << "Check failed: [" << #condition << "] "
    #define CHECK(condition) CCHECK(condition, _CURRENT_FILE_LOGGER_ID)
    #define PCHECK(condition) CPCHECK(condition, _CURRENT_FILE_LOGGER_ID)
    #define CCHECK_EQ(a, b, ...) CCHECK(a == b, __VA_ARGS__)
    #define CCHECK_NE(a, b, ...) CCHECK(a != b, __VA_ARGS__)
    #define CCHECK_LT(a, b, ...) CCHECK(a < b, __VA_ARGS__)
    #define CCHECK_GT(a, b, ...) CCHECK(a > b, __VA_ARGS__)
    #define CCHECK_LE(a, b, ...) CCHECK(a <= b, __VA_ARGS__)
    #define CCHECK_GE(a, b, ...) CCHECK(a >= b, __VA_ARGS__)
    #define CHECK_EQ(a, b) CCHECK_EQ(a, b, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_NE(a, b) CCHECK_NE(a, b, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_LT(a, b) CCHECK_LT(a, b, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_GT(a, b) CCHECK_GT(a, b, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_LE(a, b) CCHECK_LE(a, b, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_GE(a, b) CCHECK_GE(a, b, _CURRENT_FILE_LOGGER_ID)
    namespace el {
    namespace base {
    namespace utils {
    template <typename T>
    static T* checkNotNull(T* ptr, const char* name, const char* loggers, ...) {
        CLOG_IF(ptr == nullptr, FATAL, loggers) << "Check failed: [" << name << " != nullptr]";
        return ptr;
    }
    }  // namespace utils
    }  // namespace base
    }  // namespace el
    #define CCHECK_NOTNULL(ptr, ...) el::base::utils::checkNotNull(ptr, #ptr, __VA_ARGS__)
    #define CCHECK_STREQ(str1, str2, ...) CLOG_IF(!el::base::utils::Str::cStringEq(str1, str2), FATAL, __VA_ARGS__) \
                            << "Check failed: [" << #str1 << " == " << #str2 << "] "
    #define CCHECK_STRNE(str1, str2, ...) CLOG_IF(el::base::utils::Str::cStringEq(str1, str2), FATAL, __VA_ARGS__) \
                            << "Check failed: [" << #str1 << " != " << #str2 << "] "
    #define CCHECK_STRCASEEQ(str1, str2, ...) CLOG_IF(!el::base::utils::Str::cStringCaseEq(str1, str2), FATAL, __VA_ARGS__) \
                            << "Check failed: [" << #str1 << " == " << #str2 << "] "
    #define CCHECK_STRCASENE(str1, str2, ...) CLOG_IF(el::base::utils::Str::cStringCaseEq(str1, str2), FATAL, __VA_ARGS__) \
                            << "Check failed: [" << #str1 << " != " << #str2 << "] "
    #define CHECK_NOTNULL(ptr) CCHECK_NOTNULL(ptr, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_STREQ(str1, str2) CCHECK_STREQ(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_STRNE(str1, str2) CCHECK_STRNE(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_STRCASEEQ(str1, str2) CCHECK_STRCASEEQ(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define CHECK_STRCASENE(str1, str2) CCHECK_STRCASENE(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #undef DCCHECK
    #undef DCCHECK_EQ
    #undef DCCHECK_NE
    #undef DCCHECK_LT
    #undef DCCHECK_GT
    #undef DCCHECK_LE
    #undef DCCHECK_GE
    #undef DCCHECK_NOTNULL
    #undef DCCHECK_STRCASEEQ
    #undef DCCHECK_STRCASENE
    #undef DCPCHECK
    #undef DCHECK
    #undef DCHECK_EQ
    #undef DCHECK_NE
    #undef DCHECK_LT
    #undef DCHECK_GT
    #undef DCHECK_LE
    #undef DCHECK_GE
    #undef DCHECK_NOTNULL
    #undef DCHECK_STRCASEEQ
    #undef DCHECK_STRCASENE
    #undef DPCHECK
    #define DCCHECK(condition, ...) if (_ELPP_DEBUG_LOG) CCHECK(condition, __VA_ARGS__)
    #define DCCHECK_EQ(a, b, ...) if (_ELPP_DEBUG_LOG) CCHECK_EQ(a, b, __VA_ARGS__)
    #define DCCHECK_NE(a, b, ...) if (_ELPP_DEBUG_LOG) CCHECK_NE(a, b, __VA_ARGS__)
    #define DCCHECK_LT(a, b, ...) if (_ELPP_DEBUG_LOG) CCHECK_LT(a, b, __VA_ARGS__)
    #define DCCHECK_GT(a, b, ...) if (_ELPP_DEBUG_LOG) CCHECK_GT(a, b, __VA_ARGS__)
    #define DCCHECK_LE(a, b, ...) if (_ELPP_DEBUG_LOG) CCHECK_LE(a, b, __VA_ARGS__)
    #define DCCHECK_GE(a, b, ...) if (_ELPP_DEBUG_LOG) CCHECK_GE(a, b, __VA_ARGS__)
    #define DCCHECK_NOTNULL(ptr, ...) if (_ELPP_DEBUG_LOG) CCHECK_NOTNULL(ptr, __VA_ARGS__)
    #define DCCHECK_STREQ(str1, str2, ...) if (_ELPP_DEBUG_LOG) CCHECK_STREQ(str1, str2, __VA_ARGS__)
    #define DCCHECK_STRNE(str1, str2, ...) if (_ELPP_DEBUG_LOG) CCHECK_STRNE(str1, str2, __VA_ARGS__)
    #define DCCHECK_STRCASEEQ(str1, str2, ...) if (_ELPP_DEBUG_LOG) CCHECK_STRCASEEQ(str1, str2, __VA_ARGS__)
    #define DCCHECK_STRCASENE(str1, str2, ...) if (_ELPP_DEBUG_LOG) CCHECK_STRCASENE(str1, str2, __VA_ARGS__)
    #define DCPCHECK(condition, ...) if (_ELPP_DEBUG_LOG) CPCHECK(condition, __VA_ARGS__)
    #define DCHECK(condition) DCCHECK(condition, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_EQ(a, b) DCCHECK_EQ(a, b, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_NE(a, b) DCCHECK_NE(a, b, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_LT(a, b) DCCHECK_LT(a, b, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_GT(a, b) DCCHECK_GT(a, b, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_LE(a, b) DCCHECK_LE(a, b, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_GE(a, b) DCCHECK_GE(a, b, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_NOTNULL(ptr) DCCHECK_NOTNULL(ptr, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_STREQ(str1, str2) DCCHECK_STREQ(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_STRNE(str1, str2) DCCHECK_STRNE(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_STRCASEEQ(str1, str2) DCCHECK_STRCASEEQ(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define DCHECK_STRCASENE(str1, str2) DCCHECK_STRCASENE(str1, str2, _CURRENT_FILE_LOGGER_ID)
    #define DPCHECK(condition) DCPCHECK(condition, _CURRENT_FILE_LOGGER_ID)
    #if defined(_ELPP_DISABLE_DEFAULT_CRASH_HANDLING)
    #   define _ELPP_USE_DEF_CRASH_HANDLER false
    #else
    #   define _ELPP_USE_DEF_CRASH_HANDLER true
    #endif  // defined(_ELPP_DISABLE_DEFAULT_CRASH_HANDLING)
    #define _ELPP_CRASH_HANDLER_INIT
    #define _ELPP_INIT_EASYLOGGINGPP(val)\
        _ELPP_INITI_BASIC_DECLR\
        namespace el {\
            namespace base {\
                el::base::type::StoragePointer elStorage(val);\
            }\
            el::base::debug::CrashHandler elCrashHandler(_ELPP_USE_DEF_CRASH_HANDLER);\
        }
    
    #define _INITIALIZE_EASYLOGGINGPP\
        _ELPP_INIT_EASYLOGGINGPP(new el::base::Storage(el::LogBuilderPtr(new el::base::DefaultLogBuilder())))
    #define _INITIALIZE_NULL_EASYLOGGINGPP\
        _ELPP_INITI_BASIC_DECLR\
        namespace el {\
            namespace base {\
                el::base::type::StoragePointer elStorage;\
            }\
            el::base::debug::CrashHandler elCrashHandler(_ELPP_USE_DEF_CRASH_HANDLER);\
        }
    // NOTE: no _ELPP_INITI_BASIC_DECLR when sharing - causes double free corruption on external symbols
    #define _SHARE_EASYLOGGINGPP(initializedStorage)\
        namespace el {\
            namespace base {\
                el::base::type::StoragePointer elStorage(initializedStorage);\
            }\
            el::base::debug::CrashHandler elCrashHandler(_ELPP_USE_DEF_CRASH_HANDLER);\
        }
    
    #if defined(_ELPP_UNICODE)
    #   define _START_EASYLOGGINGPP(argc, argv) el::Helpers::setArgs(argc, argv); std::locale::global(std::locale(""))
    #else
    #   define _START_EASYLOGGINGPP(argc, argv) el::Helpers::setArgs(argc, argv)
    #endif  // defined(_ELPP_UNICODE)
    // For minimal backward compatibility
    namespace easyloggingpp = el;
    #endif // EASYLOGGINGPP_H  // NOLINT