22 #ifndef LOGGER_UTILITY_MACROS_ 23 #define LOGGER_UTILITY_MACROS_ 25 #define STRINGIFY(x) #x 26 #define TOSTRING(x) STRINGIFY(x) 27 #define __FILE_LINE__ __FILE__ "(" TOSTRING(__LINE__) ")" 28 #define __FILENAME_LINE__ (strrchr(__FILE__, '/') ? strrchr(__FILE_LINE__, '/') + 1 : __FILE_LINE__) 32 #define __FUNC__ __FUNCSIG__ 36 #define __FUNC__ __PRETTY_FUNCTION__ 39 #if !defined(__FUNC__) 43 #define va_num_args(...) va_num_args_impl(__VA_ARGS__, 5,4,3,2,1) 44 #define va_num_args_impl(_1,_2,_3,_4,_5,N,...) N 46 #define macro_dispatcher(func, ...) macro_dispatcher_(func, va_num_args(__VA_ARGS__)) 47 #define macro_dispatcher_(func, nargs) macro_dispatcher__(func, nargs) 48 #define macro_dispatcher__(func, nargs) func ## nargs 53 #define KTCOLOR_NORMAL "0" 54 #define KTCOLOR_BRIGHT "1" 55 #define KTCOLOR_FOREGROUND_RED "31" 56 #define KTCOLOR_FOREGROUND_GREEN "32" 57 #define KTCOLOR_FOREGROUND_YELLOW "33" 58 #define KTCOLOR_FOREGROUND_BLUE "34" 59 #define KTCOLOR_FOREGROUND_CYAN "36" 60 #define KTCOLOR_FOREGROUND_WHITE "37" 61 #define KTCOLOR_PREFIX "\033[" 62 #define KTCOLOR_SUFFIX "m" 63 #define KTCOLOR_SEPARATOR ";" 134 Location(
const char*
const fileName =
"",
const char*
const functionName =
"",
int lineNumber = -1) :
249 Log(eFatal, message, loc);
261 #define __KTDEFAULT_LOGGER ::Nymph::KTLogger::GetRootLogger() 263 #define __KTLOG_LOCATION ::Nymph::KTLogger::Location(__FILE__, __FUNC__, __LINE__) 265 #define __KTLOG_LOG_4(I,L,M,O) \ 267 if (I.IsLevelEnabled(::Nymph::KTLogger::e##L)) { \ 268 static bool _sLoggerMarker = false; \ 269 if (!O || !_sLoggerMarker) { \ 270 _sLoggerMarker = true; \ 271 ::std::ostringstream stream; stream << M; \ 272 I.Log(::Nymph::KTLogger::e##L, stream.str(), __KTLOG_LOCATION); \ 277 #define __KTLOG_LOG_3(I,L,M) __KTLOG_LOG_4(I,L,M,false) 278 #define __KTLOG_LOG_2(L,M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,L,M,false) 279 #define __KTLOG_LOG_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Debug,M,false) 281 #define __KTLOG_TRACE_2(I,M) __KTLOG_LOG_4(I,Trace,M,false) 282 #define __KTLOG_TRACE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Trace,M,false) 285 #define __KTLOG_DEBUG_2(I,M) __KTLOG_LOG_4(I,Debug,M,false) 286 #define __KTLOG_DEBUG_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Debug,M,false) 288 #define __KTLOG_DEBUG_2(I,M) __KTLOG_LOG_4(I,Debug,"",false) 289 #define __KTLOG_DEBUG_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Debug,"",false) 292 #define __KTLOG_INFO_2(I,M) __KTLOG_LOG_4(I,Info,M,false) 293 #define __KTLOG_INFO_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Info,M,false) 295 #define __KTLOG_PROG_2(I,M) __KTLOG_LOG_4(I,Prog,M,false) 296 #define __KTLOG_PROG_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Prog,M,false) 298 #define __KTLOG_WARN_2(I,M) __KTLOG_LOG_4(I,Warn,M,false) 299 #define __KTLOG_WARN_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Warn,M,false) 301 #define __KTLOG_ERROR_2(I,M) __KTLOG_LOG_4(I,Error,M,false) 302 #define __KTLOG_ERROR_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Error,M,false) 304 #define __KTLOG_FATAL_2(I,M) __KTLOG_LOG_4(I,Fatal,M,false) 305 #define __KTLOG_FATAL_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Fatal,M,false) 307 #define __KTLOG_ASSERT_3(I,C,M) if (!(C)) { __MTLOG_ERROR_2(I,M) } 308 #define __KTLOG_ASSERT_2(C,M) __KTLOG_ASSERT_3(__KTDEFAULT_LOGGER,C,M) 311 #define __KTLOG_LOG_ONCE_3(I,L,M) __KTLOG_LOG_4(I,L,M,true) 312 #define __KTLOG_LOG_ONCE_2(L,M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,L,M,true) 313 #define __KTLOG_LOG_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Debug,M,true) 315 #define __KTLOG_TRACE_ONCE_2(I,M) __KTLOG_LOG_4(I,Trace,M,true) 316 #define __KTLOG_TRACE_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Trace,M,true) 318 #define __KTLOG_DEBUG_ONCE_2(I,M) __KTLOG_LOG_4(I,Debug,M,true) 319 #define __KTLOG_DEBUG_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Debug,M,true) 321 #define __KTLOG_INFO_ONCE_2(I,M) __KTLOG_LOG_4(I,Info,M,true) 322 #define __KTLOG_INFO_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Info,M,true) 324 #define __KTLOG_PROG_ONCE_2(I,M) __KTLOG_LOG_4(I,Prog,M,true) 325 #define __KTLOG_PROG_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Prog,M,true) 327 #define __KTLOG_WARN_ONCE_2(I,M) __KTLOG_LOG_4(I,Warn,M,true) 328 #define __KTLOG_WARN_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Warn,M,true) 330 #define __KTLOG_ERROR_ONCE_2(I,M) __KTLOG_LOG_4(I,Error,M,true) 331 #define __KTLOG_ERROR_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Error,M,true) 333 #define __KTLOG_FATAL_ONCE_2(I,M) __KTLOG_LOG_4(I,Fatal,M,true) 334 #define __KTLOG_FATAL_ONCE_1(M) __KTLOG_LOG_4(__KTDEFAULT_LOGGER,Fatal,M,true) 339 #define KTLOGGER(I,K) static ::Nymph::KTLogger I(K); 341 #define KTLOG(...) macro_dispatcher(__KTLOG_LOG_, __VA_ARGS__)(__VA_ARGS__) 342 #define KTTRACE(...) macro_dispatcher(__KTLOG_TRACE_, __VA_ARGS__)(__VA_ARGS__) 343 #define KTDEBUG(...) macro_dispatcher(__KTLOG_DEBUG_, __VA_ARGS__)(__VA_ARGS__) 344 #define KTINFO(...) macro_dispatcher(__KTLOG_INFO_, __VA_ARGS__)(__VA_ARGS__) 345 #define KTPROG(...) macro_dispatcher(__KTLOG_PROG_, __VA_ARGS__)(__VA_ARGS__) 346 #define KTWARN(...) macro_dispatcher(__KTLOG_WARN_, __VA_ARGS__)(__VA_ARGS__) 347 #define KTERROR(...) macro_dispatcher(__KTLOG_ERROR_, __VA_ARGS__)(__VA_ARGS__) 348 #define KTFATAL(...) macro_dispatcher(__KTLOG_FATAL_, __VA_ARGS__)(__VA_ARGS__) 349 #define KTASSERT(...) macro_dispatcher(__KTLOG_ASSERT_, __VA_ARGS__)(__VA_ARGS__) 351 #define KTLOG_ONCE(...) macro_dispatcher(__KTLOG_LOG_ONCE_, __VA_ARGS__)(__VA_ARGS__) 352 #define KTTRACE_ONCE(...) macro_dispatcher(__KTLOG_TRACE_ONCE_, __VA_ARGS__)(__VA_ARGS__) 353 #define KTDEBUG_ONCE(...) macro_dispatcher(__KTLOG_DEBUG_ONCE_, __VA_ARGS__)(__VA_ARGS__) 354 #define KTINFO_ONCE(...) macro_dispatcher(__KTLOG_INFO_ONCE_, __VA_ARGS__)(__VA_ARGS__) 355 #define KTPROG_ONCE(...) macro_dispatcher(__KTLOG_PROG_ONCE_, __VA_ARGS__)(__VA_ARGS__) 356 #define KTWARN_ONCE(...) macro_dispatcher(__KTLOG_WARN_ONCE_, __VA_ARGS__)(__VA_ARGS__) 357 #define KTERROR_ONCE(...) macro_dispatcher(__KTLOG_ERROR_ONCE_, __VA_ARGS__)(__VA_ARGS__) 358 #define KTFATAL_ONCE(...) macro_dispatcher(__KTLOG_FATAL_ONCE_, __VA_ARGS__)(__VA_ARGS__) void LogFatal(const std::string &message, const Location &loc=Location())
bool IsLevelEnabled(ELevel level) const
KTLogger(const char *name=0)
void SetLevel(ELevel level) const
std::string fFunctionName
void LogDebug(const std::string &message, const Location &loc=Location())
static KTLogger & GetRootLogger()
void Log(ELevel level, const std::string &message, const Location &loc=Location())
Location(const char *const fileName="", const char *const functionName="", int lineNumber=-1)
void LogInfo(const std::string &message, const Location &loc=Location())
void LogWarn(const std::string &message, const Location &loc=Location())
void LogError(const std::string &message, const Location &loc=Location())
void LogTrace(const std::string &message, const Location &loc=Location())
void LogProg(const std::string &message, const Location &loc=Location())