// deprecation macro
#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-#define ALIROOT_DEPRECATED(func) func __attribute__ ((deprecated))
+# define ALIROOT_DEPRECATED(func) func __attribute__ ((deprecated))
#elif defined(_MSC_VER) && _MSC_VER >= 1300
-#define ALIROOT_DEPRECATED(func) __declspec(deprecated) func
-# else
-#define ALIROOT_DEPRECATED(func) func
+# define ALIROOT_DEPRECATED(func) __declspec(deprecated) func
+#else
+# define ALIROOT_DEPRECATED(func) func
#endif
/**
// module name macro
#ifdef _MODULE_
-#define MODULENAME() _MODULE_
+# define MODULENAME() _MODULE_
#else
-#define MODULENAME() "NoModule"
+# define MODULENAME() "NoModule"
#endif
// function name macro
#if defined(__GNUC__) || defined(__ICC) || defined(__ECC) || defined(__APPLE__)
-#define FUNCTIONNAME() __FUNCTION__
+# define FUNCTIONNAME() __FUNCTION__
// #elif defined(__HP_aCC) || defined(__alpha) || defined(__DECCXX)
// #define FUNCTIONNAME() __FUNC__
#else
-#define FUNCTIONNAME() "???"
+# define FUNCTIONNAME() "???"
#endif
// redirection
-#define REDIRECTSTDOUT(type, level, scope, whatever) {Int_t originalStdout = AliLog::RedirectStdoutTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); whatever; AliLog::RestoreStdout(originalStdout);}
-#define REDIRECTSTDERR(type, level, scope, whatever) {Int_t originalStderr = AliLog::RedirectStderrTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); whatever; AliLog::RestoreStderr(originalStderr);}
-#define REDIRECTSTDOUTANDSTDERR(type, level, scope, whatever) {Int_t originalStdout = AliLog::RedirectStdoutTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); Int_t originalStderr = AliLog::RedirectStderrTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); whatever; AliLog::RestoreStderr(originalStderr); AliLog::RestoreStdout(originalStdout);}
+/**
+ * Redirect output to std::cout to specified log stream
+ *
+ * @param type Type of stream to re-direct to
+ * @param level Level of output
+ * @param scope Scope
+ * @param whatever Any code that will output to std::cout
+ */
+#define REDIRECTSTDOUT(type, level, scope, whatever) \
+ do {Int_t originalStdout = AliLog::RedirectStdoutTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); \
+ whatever; AliLog::RestoreStdout(originalStdout);} while(false)
+/**
+ * Redirect output to std::cerr to specified log stream
+ *
+ * @param type Type of stream to re-direct to
+ * @param level Level of output
+ * @param scope Scope
+ * @param whatever Any code that will output to std::cout
+ */
+#define REDIRECTSTDERR(type, level, scope, whatever) \
+ do {Int_t originalStderr = AliLog::RedirectStderrTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); \
+ whatever; AliLog::RestoreStderr(originalStderr);} while(false)
+/**
+ * Redirect output to std::cout and std::cerr to specified log stream
+ *
+ * @param type Type of stream to re-direct to
+ * @param level Level of output
+ * @param scope Scope
+ * @param whatever Any code that will output to std::cout or std::cerr
+ */
+#define REDIRECTSTDOUTANDSTDERR(type, level, scope, whatever) \
+ do {Int_t originalStdout = AliLog::RedirectStdoutTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); \
+ Int_t originalStderr = AliLog::RedirectStderrTo(type, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__, kFALSE); \
+ whatever; AliLog::RestoreStderr(originalStderr); AliLog::RestoreStdout(originalStdout);} while(false)
// debug level
#ifdef LOG_NO_DEBUG
-#define AliDebugLevel() -1
-#define AliDebugLevelClass() -1
-#define AliDebugLevelGeneral(scope) -1
+# define AliDebugLevel() -1
+# define AliDebugLevelClass() -1
+# define AliDebugLevelGeneral(scope) -1
#else
-#define AliDebugLevel() ((AliLog::IsDebugEnabled()) ? AliLog::GetDebugLevel(MODULENAME(), ClassName()) : -1)
-#define AliDebugLevelClass() ((AliLog::IsDebugEnabled()) ? AliLog::GetDebugLevel(MODULENAME(), Class()->GetName()) : -1)
-#define AliDebugLevelGeneral(scope) ((AliLog::IsDebugEnabled()) ? AliLog::GetDebugLevel(MODULENAME(), scope) : -1)
+/**
+ * Get the object scope debug level
+ */
+# define AliDebugLevel() ((AliLog::IsDebugEnabled()) ? AliLog::GetDebugLevel(MODULENAME(), ClassName()) : -1)
+/**
+ * Get the class (ROOT-enabled) debug level
+ */
+# define AliDebugLevelClass() ((AliLog::IsDebugEnabled()) ? AliLog::GetDebugLevel(MODULENAME(), Class()->GetName()) : -1)
+/**
+ * Get the debug level associated with scope
+ * @param scope Scope
+ */
+# define AliDebugLevelGeneral(scope) ((AliLog::IsDebugEnabled()) ? AliLog::GetDebugLevel(MODULENAME(), scope) : -1)
#endif
// debug messages
#ifdef LOG_NO_DEBUG
-#define AliDebug(level, message)
-#define AliDebugClass(level, message)
-#define AliDebugGeneral(scope, level, message)
+# define AliDebug(level, message) do { } while (false)
+# define AliDebugClass(level, message) do { } while (false)
+# define AliDebugGeneral(scope, level, message) do { } while (false)
+# define AliDebugF(level, message,...) do { } while (false)
+# define AliDebugClassF(level, message,...) do { } while (false)
+# define AliDebugGeneralF(scope, level, message,...) do { } while (false)
#else
// inspired by log4cxx code (see log4cxx/Logger.h)
// implements GCC branch prediction for increasing logging performance
-#if !defined(ALIROOT_UNLIKELY)
-#if defined(__GNUC__) && (__GNUC__ >= 3)
+# if !defined(ALIROOT_UNLIKELY)
+# if defined(__GNUC__) && (__GNUC__ >= 3)
/**
-Provides optimization hint to the compiler
-to optimize for the expression being false.
-@param expr boolean expression.
-@returns value of expression.
-*/
-#define ALIROOT_UNLIKELY(expr) __builtin_expect(expr, 0)
-#else
+ * Provides optimization hint to the compiler
+ * to optimize for the expression being false.
+ * @param expr boolean expression.
+ * @returns value of expression.
+ */
+# define ALIROOT_UNLIKELY(expr) __builtin_expect(expr, 0)
+# else
/**
-Provides optimization hint to the compiler
-to optimize for the expression being false.
-@param expr boolean expression.
-@returns value of expression.
-**/
-#define ALIROOT_UNLIKELY(expr) expr
-#endif
-#endif
+ * Provides optimization hint to the compiler
+ * to optimize for the expression being false.
+ * @param expr boolean expression.
+ * @returns value of expression.
+ */
+# define ALIROOT_UNLIKELY(expr) expr
+# endif
+# endif
/**
-Logs a message to a specified logger with the DEBUG level.
-
-@param logLevel the debug level.
-@param message message to print in the following format: Form(message).
- Note, that message should contain balanced parenthesis, like
- <code>AliDebug(1, Form("Failed to decode line %d of %s", line, filename));</code>
-*/
-#define AliDebug(logLevel, message) \
+ *
+ * Logs a message to a specified logger with the DEBUG level.
+ *
+ * @param logLevel the debug level.
+ * @param message message to print in the following format: Form(message).
+ * Note, that message should contain balanced parenthesis, like
+ * <code>AliDebug(1, Form("Failed to decode line %d of %s", line, filename));</code>
+ */
+# define AliDebug(logLevel, message) \
do { if (ALIROOT_UNLIKELY(AliLog::IsDebugEnabled() && AliLog::GetDebugLevel(MODULENAME(), ClassName()) >= logLevel)) {\
AliLog::Debug(logLevel, message, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__); }} while (0)
-
/**
-Logs a message to a specified logger with the DEBUG level.
-
-@param logLevel the debug level.
-@param message message to print in the following format: Form(message).
- Note, that message should contain balanced parenthesis, like
- <code>AliDebug(1, Form("Failed to decode line %d of %s", line, filename));</code>
-*/
-#define AliDebugClass(logLevel, message) \
+ *
+ * Logs a message to a specified logger with the DEBUG level. For use
+ * in static member functions of a class
+ *
+ * @param logLevel the debug level.
+ * @param message message to print in the following format: Form(message).
+ * Note, that message should contain balanced parenthesis, like
+ * <code>AliDebug(1, Form("Failed to decode line %d of %s", line, filename));</code>
+ */
+# define AliDebugClass(logLevel, message) \
do { if (ALIROOT_UNLIKELY(AliLog::IsDebugEnabled() && AliLog::GetDebugLevel(MODULENAME(), Class()->GetName()) >= logLevel)) {\
AliLog::Debug(logLevel, message, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__); }} while (0)
/**
-Logs a message to a specified logger with the DEBUG level.
-
-@param scope the logging scope.
-@param logLevel the debug level.
-@param message message to print in the following format: Form(message).
- Note, that message should contain balanced parenthesis, like
- <code>AliDebug(1, Form("Failed to decode line %d of %s", line, filename));</code>
+ * Logs a message to a specified logger with the DEBUG level. For use
+ * in non-ROOT-enabled-class scope.
+ *
+ * @param scope the logging scope.
+ * @param logLevel the debug level.
+ * @param message message to print in the following format: Form(message).
+ * Note, that message should contain balanced parenthesis, like
+ * <code>AliDebug(1, Form("Failed to decode line %d of %s", line, filename));</code>
*/
-#define AliDebugGeneral(scope, logLevel, message) \
+# define AliDebugGeneral(scope, logLevel, message) \
do { if (ALIROOT_UNLIKELY(AliLog::IsDebugEnabled() && AliLog::GetDebugLevel(MODULENAME(), scope) >= logLevel)) {\
AliLog::Debug(logLevel, message, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__); }} while (0)
-
+/**
+ * Macro to output debugging information. This excepts a printf-like
+ * format statement. Note, at least 3 arguments (in total) must be
+ * passed.
+ *
+ * @param logLevel Debug level
+ * @param format Printf-like format.
+ */
+# define AliDebugF(logLevel,format,...) \
+do { if (ALIROOT_UNLIKELY(AliLog::IsDebugEnabled() && AliLog::GetDebugLevel(MODULENAME(), ClassName()) >= logLevel)) { \
+ TString m;m.Form(format,__VA_ARGS__); \
+ AliLog::Debug(logLevel, m, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__); }} while (0)
+/**
+ * Outut debug information, filtered on debug level. For use in
+ * static member function of a ROOT-enabled class. This excepts a
+ * printf-like format statement. Note, at least 3 arguments (in
+ * total) must be passed.
+ *
+ * @param logLevel Debug level
+ * @param format Printf-like format
+ *
+ * @return
+ */
+# define AliDebugClassF(logLevel,format,...) \
+ do { if (ALIROOT_UNLIKELY(AliLog::IsDebugEnabled() && AliLog::GetDebugLevel(MODULENAME(), Class()->GetName()) >= logLevel)) { \
+ TString m;m.Form(format,__VA_ARGS__); \
+ AliLog::Debug(logLevel, m, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__); }} while (0)
+/**
+ * Outut debug information, filtered on debug level. For use in
+ * static member function of a non-ROOT-enabled class-scope. This
+ * excepts a printf-like format statement. Note, at least 3 arguments
+ * (in total) must be passed.
+ *
+ * @param scope Scope
+ * @param logLevel Debug level
+ * @param format Printf-like format
+ *
+ * @return
+ */
+# define AliDebugGeneralF(scope,logLevel,format,...) \
+ do { if (ALIROOT_UNLIKELY(AliLog::IsDebugEnabled() && AliLog::GetDebugLevel(MODULENAME(), scope) >= logLevel)) { \
+ TString m;m.Form(format,__VA_ARGS__); \
+ AliLog::Debug(logLevel, m, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__); }} while (0)
+
#endif
// redirection to debug
#define AliDebugGeneralStream(scope, level) AliLog::Stream(AliLog::kDebug, level, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__)
+/**
+ * Macro that will output stuff using the logging facilities.
+ *
+ * @param lvl Message level
+ * @param message Message to show
+ */
+#define AliMessage(lvl,message) do { \
+ AliLog::Message(lvl, message, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__);} while(false)
+/**
+ * Macro that will output stuff using the logging facilities.
+ * For use in static member function of ROOT-enabled class-scope.
+ *
+ * @param lvl Message level
+ * @param message Message to show
+ */
+#define AliMessageClass(lvl,message) do { \
+ AliLog::Message(lvl, message, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__);} while(false)
+/**
+ * Macro that will output stuff using the logging facilities.
+ * For use in non-ROOT-enabled class-scope.
+ *
+ * @param scope Scope
+ * @param lvl Message level
+ * @param message Message to show
+ */
+#define AliMessageGeneral(scope,lvl,message) do { \
+ AliLog::Message(lvl, message, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__);} while(false)
+/**
+ * Print a message using the AliLog logging facility. This macro
+ * accepts printf-like format arguments. Note, at least 3 arguments
+ * must be passed.
+ * @code
+ * AliMessageF(1, "foo"); // <-- Failes
+ * AliMessageF(1, "foo %d", 42); // <-- OK
+ * @endcode
+ *
+ * @param lvl Message level
+ * @param format printf-like format
+ */
+#define AliMessageF(lvl,format,...) do { \
+ TString m; m.Form(format,__VA_ARGS__); \
+ AliLog::Message(lvl, m, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__);} while(false)
+/**
+ * Print a message using the AliLog logging facility. This macro
+ * accepts printf-like format arguments. Note, at least 3 arguments
+ * must be passed.
+ * @code
+ * AliMessageF(1, "foo"); // <-- Failes
+ * AliMessageF(1, "foo %d", 42); // <-- OK
+ * @endcode
+ *
+ * This is for static member function in for ROOT-enabled class-scope
+ *
+ * @param lvl Message level
+ * @param format printf-like format
+ */
+#define AliMessageClassF(lvl,format,...) do { \
+ TString m; m.Form(format,__VA_ARGS__); \
+ AliLog::Message(lvl, m, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__);} while(false)
+/**
+ * Print a message using the AliLog logging facility. This macro
+ * accepts printf-like format arguments. Note, at least 3 arguments
+ * must be passed.
+ * @code
+ * AliMessageF(1, "foo"); // <-- Failes
+ * AliMessageF(1, "foo %d", 42); // <-- OK
+ * @endcode
+ *
+ * This is for non-ROOT-enabled class-scope
+ *
+ * @param scope Scope
+ * @param lvl Message level
+ * @param format printf-like format
+ */
+#define AliMessageGeneralF(scope,lvl,format,...) do { \
+ TString m; m.Form(format,__VA_ARGS__); \
+ AliLog::Message(lvl, m, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__);} while(false)
+
// info messages
#ifdef LOG_NO_INFO
-#define AliInfo(message)
-#define AliInfoClass(message)
-#define AliInfoGeneral(scope, message)
+# define AliInfo(message) do { } while (false)
+# define AliInfoClass(message) do { } while (false)
+# define AliInfoGeneral(scope, message) do { } while (false)
+# define AliInfoF(message,...) do { } while (false)
+# define AliInfoClassF(message,...) do { } while (false)
+# define AliInfoGeneralF(scope, message,...) do { } while (false)
#else
-#define AliInfo(message) {AliLog::Message(AliLog::kInfo, message, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliInfoClass(message) {AliLog::Message(AliLog::kInfo, message, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliInfoGeneral(scope, message) {AliLog::Message(AliLog::kInfo, message, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__);}
+/**
+ * Forwards to AliMessage with log level of AliLog::kInfo
+ * @see AliMessage
+ */
+# define AliInfo(message) AliMessage(AliLog::kInfo, message)
+/**
+ * Forwards to AliMessageClass with log level of AliLog::kInfo
+ * @see AliMessageClass
+ */
+# define AliInfoClass(message) AliMessageClass(AliLog::kInfo, message)
+/**
+ * Forwards to AliMessageGeneral with log level of AliLog::kInfo
+ * @see AliMessageGeneral
+ */
+# define AliInfoGeneral(scope, message) AliMessageGeneral(scope, AliLog::kInfo, message)
+/**
+ * Forwards to AliMessageF with log level of AliLog::kInfo
+ * @see AliMessageF
+ */
+# define AliInfoF(message,...) AliMessageF(AliLog::kInfo, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageClassF with log level of AliLog::kInfo
+ * @see AliMessageClassF
+ */
+# define AliInfoClassF(message,...) AliMessageClassF(AliLog::kInfo, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageGeneralF with log level of AliLog::kInfo
+ * @see AliMessageGeneralF
+ */
+# define AliInfoGeneralF(scope,message,...) AliMessageGeneralF(scope, AliLog::kInfo, message, __VA_ARGS__)
#endif
// redirection to info
// warning messages
#ifdef LOG_NO_WARNING
-#define AliWarning(message)
-#define AliWarningClass(message)
-#define AliWarningGeneral(scope, message)
+# define AliWarning(message) do { } while (false)
+# define AliWarningClass(message) do { } while (false)
+# define AliWarningGeneral(scope, message) do { } while (false)
+# define AliWarningF(message,...) do { } while (false)
+# define AliWarningClassF(message,...) do { } while (false)
+# define AliWarningGeneralF(scope, message,...) do { } while (false)
#else
-#define AliWarning(message) {AliLog::Message(AliLog::kWarning, message, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliWarningClass(message) {AliLog::Message(AliLog::kWarning, message, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliWarningGeneral(scope, message) {AliLog::Message(AliLog::kWarning, message, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__);}
+/**
+ * Forwards to AliMessage with log level of AliLog::kWarning
+ * @see AliMessage
+ */
+# define AliWarning(message) AliMessage(AliLog::kWarning, message)
+/**
+ * Forwards to AliMessageClass with log level of AliLog::kWarning
+ * @see AliMessageClass
+ */
+# define AliWarningClass(message) AliMessageClass(AliLog::kWarning, message)
+/**
+ * Forwards to AliMessageGeneral with log level of AliLog::kWarning
+ * @see AliMessageGeneral
+ */
+# define AliWarningGeneral(scope, message) AliMessageGeneral(scope, AliLog::kWarning, message)
+/**
+ * Forwards to AliMessageF with log level of AliLog::kWarning
+ * @see AliMessageF
+ */
+# define AliWarningF(message,...) AliMessageF(AliLog::kWarning, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageClassF with log level of AliLog::kWarning
+ * @see AliMessageClassF
+ */
+# define AliWarningClassF(message,...) AliMessageClassF(AliLog::kWarning, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageGeneralF with log level of AliLog::kWarning
+ * @see AliMessageGeneralF
+ */
+# define AliWarningGeneralF(scope,message,...) AliMessageGeneralF(scope, AliLog::kWarning, message, __VA_ARGS__)
#endif
// redirection to warning
// error messages
-#define AliError(message) {AliLog::Message(AliLog::kError, message, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliErrorClass(message) {AliLog::Message(AliLog::kError, message, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliErrorGeneral(scope, message) {AliLog::Message(AliLog::kError, message, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__);}
+/**
+ * Forwards to AliMessage with log level of AliLog::kError
+ * @see AliMessage
+ */
+#define AliError(message) AliMessage(AliLog::kError, message)
+/**
+ * Forwards to AliMessageClass with log level of AliLog::kError
+ * @see AliMessageClass
+ */
+#define AliErrorClass(message) AliMessageClass(AliLog::kError, message)
+/**
+ * Forwards to AliMessageGeneral with log level of AliLog::kError
+ * @see AliMessageGeneral
+ */
+#define AliErrorGeneral(scope, message) AliMessageGeneral(scope, AliLog::kError, message)
+/**
+ * Forwards to AliMessageF with log level of AliLog::kError
+ * @see AliMessageF
+ */
+#define AliErrorF(message,...) AliMessageF(AliLog::kError, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageClassF with log level of AliLog::kError
+ * @see AliMessageClassF
+ */
+#define AliErrorClassF(message,...) AliMessageClassF(AliLog::kError, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageGeneralF with log level of AliLog::kError
+ * @see AliMessageGeneralF
+ */
+#define AliErrorGeneralF(scope,message,...) AliMessageGeneralF(scope, AliLog::kError, message, __VA_ARGS__)
// redirection to error
#define StdoutToAliError(whatever) REDIRECTSTDOUT(AliLog::kError, 0, ClassName(), whatever)
// fatal messages
-#define AliFatal(message) {AliLog::Message(AliLog::kFatal, message, MODULENAME(), ClassName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliFatalClass(message) {AliLog::Message(AliLog::kFatal, message, MODULENAME(), Class()->GetName(), FUNCTIONNAME(), __FILE__, __LINE__);}
-#define AliFatalGeneral(scope, message) {AliLog::Message(AliLog::kFatal, message, MODULENAME(), scope, FUNCTIONNAME(), __FILE__, __LINE__);}
+/**
+ * Forwards to AliMessage with log level of AliLog::kFatal
+ * @see AliMessage
+ */
+#define AliFatal(message) AliMessage(AliLog::kFatal, message)
+/**
+ * Forwards to AliMessageClass with log level of AliLog::kFatal
+ * @see AliMessageClass
+ */
+#define AliFatalClass(message) AliMessageClass(AliLog::kFatal, message)
+/**
+ * Forwards to AliMessageGeneral with log level of AliLog::kFatal
+ * @see AliMessageGeneral
+ */
+#define AliFatalGeneral(scope, message) AliMessageGeneral(scope, AliLog::kFatal, message)
+/**
+ * Forwards to AliMessageF with log level of AliLog::kFatal
+ * @see AliMessageF
+ */
+#define AliFatalF(message,...) AliMessageF(AliLog::kFatal, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageClassF with log level of AliLog::kFatal
+ * @see AliMessageClassF
+ */
+#define AliFatalClassF(message,...) AliMessageClassF(AliLog::kFatal, message, __VA_ARGS__)
+/**
+ * Forwards to AliMessageGeneralF with log level of AliLog::kFatal
+ * @see AliMessageGeneralF
+ */
+#define AliFatalGeneralF(scope,message,...) AliMessageGeneralF(scope, AliLog::kFatal, message, __VA_ARGS__)
#endif