9 #ifndef SCARAB_LOGGER_HH_ 10 #define SCARAB_LOGGER_HH_ 24 #ifndef LOGGER_UTILITY_MACROS_ 25 #define LOGGER_UTILITY_MACROS_ 27 #define va_num_args(...) va_num_args_impl(__VA_ARGS__, 5,4,3,2,1) 28 #define va_num_args_impl(_1,_2,_3,_4,_5,N,...) N 30 #define macro_dispatcher(func, ...) macro_dispatcher_(func, va_num_args(__VA_ARGS__)) 31 #define macro_dispatcher_(func, nargs) macro_dispatcher__(func, nargs) 32 #define macro_dispatcher__(func, nargs) func ## nargs 39 #define COLOR_NORMAL "0" 40 #define COLOR_BRIGHT "1" 41 #define COLOR_FOREGROUND_RED "31" 42 #define COLOR_FOREGROUND_GREEN "32" 43 #define COLOR_FOREGROUND_YELLOW "33" 44 #define COLOR_FOREGROUND_BLUE "34" 45 #define COLOR_FOREGROUND_CYAN "36" 46 #define COLOR_FOREGROUND_WHITE "37" 47 #define COLOR_PREFIX "\033[" 48 #define COLOR_SUFFIX "m" 49 #define COLOR_SEPARATOR ";" 126 Location(
const char*
const fileName =
"",
const char*
const functionName =
"",
int lineNumber = -1) :
145 logger(
const char* name = 0);
147 logger(
const std::string& name);
277 #define __DEFAULT_LOGGER scarab::logger::GetRootLogger() 279 #define __LOG_LOCATION scarab::logger::Location(__FILE__, __FUNC__, __LINE__) 281 #define __LOG_LOG_4(I,L,M,O) \ 283 if (I.IsLevelEnabled(scarab::logger::e##L)) { \ 284 static bool _sLoggerMarker = false; \ 285 if (!O || !_sLoggerMarker) { \ 286 _sLoggerMarker = true; \ 287 std::ostringstream stream; stream << M; \ 288 I.Log(scarab::logger::e##L, stream.str(), __LOG_LOCATION); \ 293 #define __LOG_LOG_4(I,L,M,O) \ 298 #define __LOG_LOG_3(I,L,M) __LOG_LOG_4(I,L,M,false) 299 #define __LOG_LOG_2(L,M) __LOG_LOG_4(__DEFAULT_LOGGER,L,M,false) 300 #define __LOG_LOG_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Debug,M,false) 302 #define __LOG_TRACE_2(I,M) __LOG_LOG_4(I,Trace,M,false) 303 #define __LOG_TRACE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Trace,M,false) 305 #define __LOG_DEBUG_2(I,M) __LOG_LOG_4(I,Debug,M,false) 306 #define __LOG_DEBUG_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Debug,M,false) 308 #define __LOG_INFO_2(I,M) __LOG_LOG_4(I,Info,M,false) 309 #define __LOG_INFO_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Info,M,false) 311 #define __LOG_PROG_2(I,M) __LOG_LOG_4(I,Prog,M,false) 312 #define __LOG_PROG_1(M) __LOG_LOG_4(__KTDEFAULT_LOGGER,Prog,M,false) 314 #define __LOG_WARN_2(I,M) __LOG_LOG_4(I,Warn,M,false) 315 #define __LOG_WARN_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Warn,M,false) 317 #define __LOG_ERROR_2(I,M) __LOG_LOG_4(I,Error,M,false) 318 #define __LOG_ERROR_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Error,M,false) 320 #define __LOG_FATAL_2(I,M) __LOG_LOG_4(I,Fatal,M,false) 321 #define __LOG_FATAL_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Fatal,M,false) 323 #define __LOG_ASSERT_3(I,C,M) if (!(C)) { __LOG_ERROR_2(I,M) } 324 #define __LOG_ASSERT_2(C,M) __LOG_ASSERT_3(__DEFAULT_LOGGER,C,M) 327 #define __LOG_LOG_ONCE_3(I,L,M) __LOG_LOG_4(I,L,M,true) 328 #define __LOG_LOG_ONCE_2(L,M) __LOG_LOG_4(__DEFAULT_LOGGER,L,M,true) 329 #define __LOG_LOG_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Debug,M,true) 331 #define __LOG_TRACE_ONCE_2(I,M) __LOG_LOG_4(I,Trace,M,true) 332 #define __LOG_TRACE_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Trace,M,true) 334 #define __LOG_DEBUG_ONCE_2(I,M) __LOG_LOG_4(I,Debug,M,true) 335 #define __LOG_DEBUG_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Debug,M,true) 337 #define __LOG_INFO_ONCE_2(I,M) __LOG_LOG_4(I,Info,M,true) 338 #define __LOG_INFO_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Info,M,true) 340 #define __LOG_WARN_ONCE_2(I,M) __LOG_LOG_4(I,Warn,M,true) 341 #define __LOG_WARN_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Warn,M,true) 343 #define __LOG_ERROR_ONCE_2(I,M) __LOG_LOG_4(I,Error,M,true) 344 #define __LOG_ERROR_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Error,M,true) 346 #define __LOG_FATAL_ONCE_2(I,M) __LOG_LOG_4(I,Fatal,M,true) 347 #define __LOG_FATAL_ONCE_1(M) __LOG_LOG_4(__DEFAULT_LOGGER,Fatal,M,true) 352 #define LOGGER(I,K) static scarab::logger I(K); 354 #define LOG(...) macro_dispatcher(__LOG_LOG_, __VA_ARGS__)(__VA_ARGS__) 359 #define LTRACE(...) macro_dispatcher(__LOG_TRACE_, __VA_ARGS__)(__VA_ARGS__) 360 #define LDEBUG(...) macro_dispatcher(__LOG_DEBUG_, __VA_ARGS__)(__VA_ARGS__) 362 #define LINFO(...) macro_dispatcher(__LOG_INFO_, __VA_ARGS__)(__VA_ARGS__) 363 #define LPROG(...) macro_dispatcher(__LOG_PROG_, __VA_ARGS__)(__VA_ARGS__) 364 #define LWARN(...) macro_dispatcher(__LOG_WARN_, __VA_ARGS__)(__VA_ARGS__) 365 #define LERROR(...) macro_dispatcher(__LOG_ERROR_, __VA_ARGS__)(__VA_ARGS__) 366 #define LFATAL(...) macro_dispatcher(__LOG_FATAL_, __VA_ARGS__)(__VA_ARGS__) 367 #define LASSERT(...) macro_dispatcher(__LOG_ASSERT_, __VA_ARGS__)(__VA_ARGS__) 369 #define LOG_ONCE(...) macro_dispatcher(__LOG_LOG_ONCE_, __VA_ARGS__)(__VA_ARGS__) 371 #define LTRACE_ONCE(...) 372 #define LDEBUG_ONCE(...) 374 #define LTRACE_ONCE(...) macro_dispatcher(__LOG_TRACE_ONCE_, __VA_ARGS__)(__VA_ARGS__) 375 #define LDEBUG_ONCE(...) macro_dispatcher(__LOG_DEBUG_ONCE_, __VA_ARGS__)(__VA_ARGS__) 377 #define LINFO_ONCE(...) macro_dispatcher(__LOG_INFO_ONCE_, __VA_ARGS__)(__VA_ARGS__) 378 #define LPROG_ONCE(...) macro_dispatcher(__LOG_PROG_ONCE_, __VA_ARGS__)(__VA_ARGS__) 379 #define LWARN_ONCE(...) macro_dispatcher(__LOG_WARN_ONCE_, __VA_ARGS__)(__VA_ARGS__) 380 #define LERROR_ONCE(...) macro_dispatcher(__LOG_ERROR_ONCE_, __VA_ARGS__)(__VA_ARGS__) 381 #define LFATAL_ONCE(...) macro_dispatcher(__LOG_FATAL_ONCE_, __VA_ARGS__)(__VA_ARGS__) 388 #define LOG(I,K) std::cout << "LOG: " << K << std::endl; 390 #define LTRACE(I,K) std::cout << "TRACE: " << K << std::endl; 391 #define LDEBUG(I,K) std::cout << "DEBUG: " << K << std::endl; 396 #define LINFO(I,K) std::cout << "INFO: " << K << std::endl; 397 #define LPROG(I,K) std::cout << "PROG: " << K << std::endl; 398 #define LWARN(I,K) std::cout << "WARN: " << K << std::endl; 399 #define LERROR(I,K) std::cout << "ERROR: " << K << std::endl; 400 #define LFATAL(I,K) std::cout << "FATAL: " << K << std::endl; 401 #define LASSERT(I,K) std::cout << "ASSERT: " << K << std::endl; 403 #define LOG_ONCE(I,K) std::cout << "LOG: " << K << std::endl; 405 #define LTRACE_ONCE(I,K) std::cout << "TRACE: " << K << std::endl; 406 #define LDEBUG_ONCE(I,K) std::cout << "DEBUG: " << K << std::endl; 408 #define LTRACE_ONCE(I,K) 409 #define LDEBUG_ONCE(I,K) 411 #define LINFO_ONCE(I,K) std::cout << "INFO: " << K << std::endl; 412 #define LPROG_ONCE(I,K) std::cout << "PROG: " << K << std::endl; 413 #define LWARN_ONCE(I,K) std::cout << "WARN: " << K << std::endl; 414 #define LERROR_ONCE(I,K) std::cout << "ERROR: " << K << std::endl; 415 #define LFATAL_ONCE(I,K) std::cout << "FATAL: " << K << std::endl;
std::string fFunctionName
static logger & GetRootLogger()
void LogWarn(const std::string &message, const Location &loc=Location())
void SetGlobalLevel(ELevel level) const
void LogInfo(const std::string &message, const Location &loc=Location())
void Log(ELevel level, const std::string &message, const Location &loc=Location())
static void SetColored(bool flag)
static void SetErrStream(std::ostream *stream)
bool IsLevelEnabled(ELevel level) const
logger(const char *name=0)
void SetLevel(ELevel level) const
void LogProg(const std::string &message, const Location &loc=Location())
void LogDebug(const std::string &message, const Location &loc=Location())
void LogTrace(const std::string &message, const Location &loc=Location())
static void SetOutStream(std::ostream *stream)
Location(const char *const fileName="", const char *const functionName="", int lineNumber=-1)
void LogFatal(const std::string &message, const Location &loc=Location())
void LogError(const std::string &message, const Location &loc=Location())