25 #include <OnixS/HandlerCore/HandlerLogger.h> 27 #include <logging/FileOutput.h> 29 #include "NamespaceHelper.h" 35 #define FUNCTION_NAME __FUNCTION__ 37 #define FUNCTION_NAME __PRETTY_FUNCTION__ 40 #define DIRECTEDGE_SOURCE_INFO ::OnixS::Logging::SourceInfo(__FILE__, __LINE__, FUNCTION_NAME) 41 #define DIRECTEDGE_SOURCE_FUNC ::OnixS::Logging::SourceInfo(nullptr, 0, FUNCTION_NAME) 42 #define DIRECTEDGE_SOURCE_LINE ::OnixS::Logging::SourceInfo(__FILE__, __LINE__, nullptr) 46 #define EXCEPTION_SOURCE_INFO DIRECTEDGE_SOURCE_INFO 47 #define LOG_SOURCE_INFO DIRECTEDGE_SOURCE_INFO 50 #define EXCEPTION_SOURCE_INFO DIRECTEDGE_SOURCE_FUNC 51 #define LOG_SOURCE_INFO DIRECTEDGE_SOURCE_FUNC 53 #define EXCEPTION_SOURCE_INFO DIRECTEDGE_SOURCE_FUNC 54 #define LOG_SOURCE_INFO OnixS::Logging::SourceInfo() 62 #define DECL_FORMAT(ftype) \ 63 TextBuilder & operator<<(TextBuilder & o, const ftype & obj) 66 #define DECL_FORMAT_BYVAL(ftype) \ 67 TextBuilder & operator<<(TextBuilder & o, ftype obj) 70 #define STRUCT_FORMAT(ftype, fformat)\ 71 TextBuilder & operator<<(TextBuilder & o, const ftype & obj) {\ 72 return o << Util::indent(4) fformat << Util::indent(-4);\ 75 #define STRUCT_FORMAT_T(ftype, fformat)\ 76 TextBuilder & operator<<(TextBuilder & o, const ftype & obj) {\ 77 return o << '[' << #ftype << "]\n" << indent(4) fformat << indent(-4);\ 81 #define ENUM_FORMAT(fenumbox, fformat)\ 82 TextBuilder & operator<<(TextBuilder & o, fenumbox::Enum obj) {\ 83 typedef fenumbox __FENUM_BOX__;\ 84 switch(obj) { fformat default: if(obj ) o << int(obj) << " (?)";\ 85 else format_null_value(o); } return o; } 87 #define FENUM(fenum) case __FENUM_BOX__::fenum: o << int(__FENUM_BOX__::fenum) << " ("#fenum")"; break; 90 #define API_ENUM_FORMAT(fenumbox, fformat)\ 91 const char ONIXS_API * enumToString(fenumbox::Enum value) {\ 92 typedef fenumbox __FENUM_BOX__;\ 93 switch(value) { fformat default: return "#Invalid enumeration value"; } } 96 #define ENUM_STR(fenum) case __FENUM_BOX__::fenum: return #fenum; 98 #define VAR(var) create_var_format(", "#var, var) 99 #define VARLN(var) '\n' << create_var_format(#var, var) 100 #define COMPLEX_FIELD(s) '\n' << indent(4) << create_var_format(#s, obj.s) << indent(-4) 101 #define FIELD(var) '\n' << create_var_format(#var, obj.var) 102 #define FIELD_AS(var, ftype) '\n' << create_var_format(#var, ftype(obj.var)) 103 #define DATE_FIELD(var) FIELD_AS(var, SDateWrapper) 104 #define TIME_FIELD(var) FIELD_AS(var, STimeWrapper) 105 #define BOOL_FIELD(var) FIELD_AS(var, OMexBool::Enum) 107 ONIXS_HANDLER_NAMESPACE_BEGIN
109 #define ASSERT_ARG(arg, cond) if(arg cond) {} else \ 110 throw ArgumentExceptionImpl("Argument value does not meet condition: "#arg" "#cond, #arg, EXCEPTION_SOURCE_INFO) 113 #define DEBUG_ASSERT_ARG(arg, cond) ASSERT_ARG(arg, cond) 115 #define DEBUG_ASSERT_ARG(arg, cond) ((void)0) 118 #define ASSERT_COND(cond) if(cond) {} else \ 119 throw OperationExceptionImpl("Object state does not meet condition: "#cond, EXCEPTION_SOURCE_INFO) 122 #define DEBUG_ASSERT_COND(cond) ASSERT_COND(cond) 124 #define DEBUG_ASSERT_COND(cond) ((void)0) 127 #if (defined(_TRACE) || defined(_DEBUG)) 129 #define DEFAULT_LOG_LEVEL Logging::LOG_LEVEL_DEBUG 131 #define DEFAULT_LOG_LEVEL Logging::LOG_LEVEL_TRACE 134 #define DEFAULT_LOG_LEVEL Logging::LOG_LEVEL_INFO 140 #define TRACE_STATE(state, logger) if(state.changed()) logger.log(ONIXS_LOG_TRACE << "|===> " __FUNCTION__) 142 #define TRACE_STATE(state, logger) do {} while(false) 148 #define TRACE_FUNC_MINI(logger) logger.log(ONIXS_LOG_TRACE << ">>> " __FUNCTION__ " >>>") 150 #define TRACE_FUNC_MINI(logger) do {} while(false) 153 typedef boost::scoped_ptr<HandlerCore::Common::HandlerLogger>
LoggerPtr;
155 using namespace Util;
164 template<
size_t NLen>
166 : name(name_, NLen - 1 ), value(value_) {}
169 name(other.name.duplicate()),
178 template<
size_t NLen,
typename T>
185 template<
size_t NLen>
192 template<
size_t NLen>
200 template<
size_t NLen,
size_t NVal>
205 const char * src = value;
208 for (
int i = 0; (i < NVal) && (c = *src++); i++)
219 inline TextBuilder & operator<<(TextBuilder & o, const VarFormatHelper<T> & var)
230 HandlerCore::Common::HandlerLogger*, OnixS::Logging::LogFacility *,
const char *contextName) ONIXS_NOEXCEPT;
233 #define ONIXS_EXCEPTION_TRACED_CALLBACK_EX(callback, logger, logFacility, contextName) \ 235 logger->log( ONIXS_LOG_DEBUG[logFacility] << "Callback " << contextName << " called successfully");\ 236 } catch(...) { HANDLER_NAMESPACE::userExceptionHandler(logger, logFacility, contextName); } \ 238 #define ONIXS_EXCEPTION_TRACED_CALLBACK(callback, contextName) ONIXS_EXCEPTION_TRACED_CALLBACK_EX(callback, logger_, this, contextName) 242 ONIXS_HANDLER_NAMESPACE_END
boost::scoped_ptr< HandlerCore::Common::HandlerLogger > LoggerPtr
void userExceptionHandler(HandlerCore::Common::HandlerLogger *, OnixS::Logging::LogFacility *, const char *contextName) ONIXS_NOEXCEPT
TextBuilder & format_var_name(TextBuilder &o, ValuePtr name)
Logging::FileOutput::PermissionOption getOutputPermission(LogFilePermission::Enum value)
#define DECL_FORMAT(ftype)
char last(const std::string &str)
TextBuilder & format_null_value(TextBuilder &o)
VarFormatHelper< ValuePtr > create_var_format(const char(&name)[NLen], const char(&value)[NVal])