| 1 | ////////////////////////////////////////////////////////////////////////// | 
 
 
 
 
 | 2 | //  Plog - portable and simple log for C++ | 
 
 
 
 
 | 3 | //  Documentation and sources: https://github.com/SergiusTheBest/plog | 
 
 
 
 
 | 4 | //  License: MPL 2.0, http://mozilla.org/MPL/2.0/ | 
 
 
 
 
 | 5 |  | 
 
 
 
 
 | 6 | #pragma once | 
 
 
 
 
 | 7 | #include <plog/Logger.h> | 
 
 
 
 
 | 8 | #include <plog/Init.h> | 
 
 
 
 
 | 9 |  | 
 
 
 
 
 | 10 | ////////////////////////////////////////////////////////////////////////// | 
 
 
 
 
 | 11 | // Helper macros that get context info | 
 
 
 
 
 | 12 |  | 
 
 
 
 
 | 13 | #if _MSC_VER >= 1600 && !defined(__INTELLISENSE__) // >= Visual Studio 2010 and skip IntelliSense | 
 
 
 
 
 | 14 | #   define PLOG_GET_THIS()      __if_exists(this) { this } __if_not_exists(this) { 0 } | 
 
 
 
 
 | 15 | #else | 
 
 
 
 
 | 16 | #   define PLOG_GET_THIS()      0 | 
 
 
 
 
 | 17 | #endif | 
 
 
 
 
 | 18 |  | 
 
 
 
 
 | 19 | #ifdef _MSC_VER | 
 
 
 
 
 | 20 | #   define PLOG_GET_FUNC()      __FUNCTION__ | 
 
 
 
 
 | 21 | #elif defined(__BORLANDC__) | 
 
 
 
 
 | 22 | #   define PLOG_GET_FUNC()      __FUNC__ | 
 
 
 
 
 | 23 | #else | 
 
 
 
 
 | 24 | #   define PLOG_GET_FUNC()      __PRETTY_FUNCTION__ | 
 
 
 
 
 | 25 | #endif | 
 
 
 
 
 | 26 |  | 
 
 
 
 
 | 27 | #if PLOG_CAPTURE_FILE | 
 
 
 
 
 | 28 | #   define PLOG_GET_FILE()      __FILE__ | 
 
 
 
 
 | 29 | #else | 
 
 
 
 
 | 30 | #   define PLOG_GET_FILE()      "" | 
 
 
 
 
 | 31 | #endif | 
 
 
 
 
 | 32 |  | 
 
 
 
 
 | 33 | ////////////////////////////////////////////////////////////////////////// | 
 
 
 
 
 | 34 | // Log severity level checker | 
 
 
 
 
 | 35 |  | 
 
 
 
 
 | 36 | #define IF_LOG_(instance, severity)     !(plog::get<instance>() && plog::get<instance>()->checkSeverity(severity)) ? (void)0 : | 
 
 
 
 
 | 37 | #define IF_LOG(severity)                IF_LOG_(PLOG_DEFAULT_INSTANCE, severity) | 
 
 
 
 
 | 38 |  | 
 
 
 
 
 | 39 | ////////////////////////////////////////////////////////////////////////// | 
 
 
 
 
 | 40 | // Main logging macros | 
 
 
 
 
 | 41 |  | 
 
 
 
 
 | 42 | #define LOG_(instance, severity)        IF_LOG_(instance, severity) (*plog::get<instance>()) += plog::Record(severity, PLOG_GET_FUNC(), __LINE__, PLOG_GET_FILE(), PLOG_GET_THIS()) | 
 
 
 
 
 | 43 | #define LOG(severity)                   LOG_(PLOG_DEFAULT_INSTANCE, severity) | 
 
 
 
 
 | 44 |  | 
 
 
 
 
 | 45 | #define LOG_VERBOSE                     LOG(plog::verbose) | 
 
 
 
 
 | 46 | #define LOG_DEBUG                       LOG(plog::debug) | 
 
 
 
 
 | 47 | #define LOG_INFO                        LOG(plog::info) | 
 
 
 
 
 | 48 | #define LOG_WARNING                     LOG(plog::warning) | 
 
 
 
 
 | 49 | #define LOG_ERROR                       LOG(plog::error) | 
 
 
 
 
 | 50 | #define LOG_FATAL                       LOG(plog::fatal) | 
 
 
 
 
 | 51 |  | 
 
 
 
 
 | 52 | #define LOG_VERBOSE_(instance)          LOG_(instance, plog::verbose) | 
 
 
 
 
 | 53 | #define LOG_DEBUG_(instance)            LOG_(instance, plog::debug) | 
 
 
 
 
 | 54 | #define LOG_INFO_(instance)             LOG_(instance, plog::info) | 
 
 
 
 
 | 55 | #define LOG_WARNING_(instance)          LOG_(instance, plog::warning) | 
 
 
 
 
 | 56 | #define LOG_ERROR_(instance)            LOG_(instance, plog::error) | 
 
 
 
 
 | 57 | #define LOG_FATAL_(instance)            LOG_(instance, plog::fatal) | 
 
 
 
 
 | 58 |  | 
 
 
 
 
 | 59 | #define LOGV                            LOG_VERBOSE | 
 
 
 
 
 | 60 | #define LOGD                            LOG_DEBUG | 
 
 
 
 
 | 61 | #define LOGI                            LOG_INFO | 
 
 
 
 
 | 62 | #define LOGW                            LOG_WARNING | 
 
 
 
 
 | 63 | #define LOGE                            LOG_ERROR | 
 
 
 
 
 | 64 | #define LOGF                            LOG_FATAL | 
 
 
 
 
 | 65 |  | 
 
 
 
 
 | 66 | #define LOGV_(instance)                 LOG_VERBOSE_(instance) | 
 
 
 
 
 | 67 | #define LOGD_(instance)                 LOG_DEBUG_(instance) | 
 
 
 
 
 | 68 | #define LOGI_(instance)                 LOG_INFO_(instance) | 
 
 
 
 
 | 69 | #define LOGW_(instance)                 LOG_WARNING_(instance) | 
 
 
 
 
 | 70 | #define LOGE_(instance)                 LOG_ERROR_(instance) | 
 
 
 
 
 | 71 | #define LOGF_(instance)                 LOG_FATAL_(instance) | 
 
 
 
 
 | 72 |  | 
 
 
 
 
 | 73 | ////////////////////////////////////////////////////////////////////////// | 
 
 
 
 
 | 74 | // Conditional logging macros | 
 
 
 
 
 | 75 |  | 
 
 
 
 
 | 76 | #define LOG_IF_(instance, severity, condition)  !(condition) ? void(0) : LOG_(instance, severity) | 
 
 
 
 
 | 77 | #define LOG_IF(severity, condition)             LOG_IF_(PLOG_DEFAULT_INSTANCE, severity, condition) | 
 
 
 
 
 | 78 |  | 
 
 
 
 
 | 79 | #define LOG_VERBOSE_IF(condition)               LOG_IF(plog::verbose, condition) | 
 
 
 
 
 | 80 | #define LOG_DEBUG_IF(condition)                 LOG_IF(plog::debug, condition) | 
 
 
 
 
 | 81 | #define LOG_INFO_IF(condition)                  LOG_IF(plog::info, condition) | 
 
 
 
 
 | 82 | #define LOG_WARNING_IF(condition)               LOG_IF(plog::warning, condition) | 
 
 
 
 
 | 83 | #define LOG_ERROR_IF(condition)                 LOG_IF(plog::error, condition) | 
 
 
 
 
 | 84 | #define LOG_FATAL_IF(condition)                 LOG_IF(plog::fatal, condition) | 
 
 
 
 
 | 85 |  | 
 
 
 
 
 | 86 | #define LOG_VERBOSE_IF_(instance, condition)    LOG_IF_(instance, plog::verbose, condition) | 
 
 
 
 
 | 87 | #define LOG_DEBUG_IF_(instance, condition)      LOG_IF_(instance, plog::debug, condition) | 
 
 
 
 
 | 88 | #define LOG_INFO_IF_(instance, condition)       LOG_IF_(instance, plog::info, condition) | 
 
 
 
 
 | 89 | #define LOG_WARNING_IF_(instance, condition)    LOG_IF_(instance, plog::warning, condition) | 
 
 
 
 
 | 90 | #define LOG_ERROR_IF_(instance, condition)      LOG_IF_(instance, plog::error, condition) | 
 
 
 
 
 | 91 | #define LOG_FATAL_IF_(instance, condition)      LOG_IF_(instance, plog::fatal, condition) | 
 
 
 
 
 | 92 |  | 
 
 
 
 
 | 93 | #define LOGV_IF(condition)                      LOG_VERBOSE_IF(condition) | 
 
 
 
 
 | 94 | #define LOGD_IF(condition)                      LOG_DEBUG_IF(condition) | 
 
 
 
 
 | 95 | #define LOGI_IF(condition)                      LOG_INFO_IF(condition) | 
 
 
 
 
 | 96 | #define LOGW_IF(condition)                      LOG_WARNING_IF(condition) | 
 
 
 
 
 | 97 | #define LOGE_IF(condition)                      LOG_ERROR_IF(condition) | 
 
 
 
 
 | 98 | #define LOGF_IF(condition)                      LOG_FATAL_IF(condition) | 
 
 
 
 
 | 99 |  | 
 
 
 
 
 | 100 | #define LOGV_IF_(instance, condition)           LOG_VERBOSE_IF_(instance, condition) | 
 
 
 
 
 | 101 | #define LOGD_IF_(instance, condition)           LOG_DEBUG_IF_(instance, condition) | 
 
 
 
 
 | 102 | #define LOGI_IF_(instance, condition)           LOG_INFO_IF_(instance, condition) | 
 
 
 
 
 | 103 | #define LOGW_IF_(instance, condition)           LOG_WARNING_IF_(instance, condition) | 
 
 
 
 
 | 104 | #define LOGE_IF_(instance, condition)           LOG_ERROR_IF_(instance, condition) | 
 
 
 
 
 | 105 | #define LOGF_IF_(instance, condition)           LOG_FATAL_IF_(instance, condition) |