]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliLog.h
Changes for #82873: Module debugging broken (Christian)
[u/mrichter/AliRoot.git] / STEER / AliLog.h
index 1155f5faae5b7d613c3f18c50eb679e0a6892a83..eba24c767a9c03ee4d04185ded95db8a723a4e79 100644 (file)
 
 // 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
 
 /**
@@ -179,103 +179,193 @@ class AliLog: public TObject
 
 // 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
@@ -295,15 +385,123 @@ Logs a message to a specified logger with the DEBUG level.
 #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
@@ -324,13 +522,43 @@ Logs a message to a specified logger with the DEBUG level.
 
 // 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
@@ -351,9 +579,36 @@ Logs a message to a specified logger with the DEBUG level.
 
 
 // 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)
@@ -373,8 +628,35 @@ Logs a message to a specified logger with the DEBUG level.
 
 
 // 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