]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/BASE/AliHLTLogging.h
Bunch crossing ID added
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTLogging.h
index a6f25c529a79188fac735609b5bb0779ba920e06..364c997a1bc3ecf33506f2fd4719d0d37c3d4db7 100644 (file)
@@ -1,4 +1,5 @@
-// @(#) $Id$
+//-*- Mode: C++ -*-
+// $Id$
 
 #ifndef ALIHLTLOGGING_H
 #define ALIHLTLOGGING_H
@@ -26,9 +27,6 @@ class AliHLTComponentHandler;
 /* the logging macros can be used inside methods of classes which inherit from 
  * AliHLTLogging
  */
-// HLTMessage is not filtered
-#define HLTMessage( ... )   LoggingVarargs(kHLTLogNone,      NULL , NULL , __FILE__ , __LINE__ , __VA_ARGS__ )
-
 // function name
 #if defined(__GNUC__) || defined(__ICC) || defined(__ECC) || defined(__APPLE__)
 #define FUNCTIONNAME() __FUNCTION__
@@ -36,7 +34,12 @@ class AliHLTComponentHandler;
 #define FUNCTIONNAME() "???"
 #endif
 
+#ifndef ALIHLTLOGGINGVARIADICFREE_H
+// HLTMessage is not filtered
+#define HLTMessage( ... )   LoggingVarargs(kHLTLogNone,      NULL , NULL , __FILE__ , __LINE__ , __VA_ARGS__ )
+
 // the following macros are filtered by the Global and Local Log Filter
+#define HLTLog( level, ... ) if (CheckFilter(level))         LoggingVarargs(level, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
 #define HLTBenchmark( ... ) LoggingVarargs(kHLTLogBenchmark, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
 #ifdef __DEBUG
 #define HLTDebug( ... )     if (CheckFilter(kHLTLogDebug) && CheckGroup(Class_Name())) LoggingVarargs(kHLTLogDebug,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
@@ -49,6 +52,24 @@ class AliHLTComponentHandler;
 #define HLTFatal( ... )     if (CheckFilter(kHLTLogFatal))   LoggingVarargs(kHLTLogFatal,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
 #define HLTImportant( ... ) if (CheckFilter(kHLTLogImportant))LoggingVarargs(kHLTLogImportant,Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
 
+// the same macros are defined variadic free, in that case the message must be complete
+// include AliHLTLoggingVariadicFree.h
+#else //ALIHLTLOGGINGVARIADICFREE_H
+#define HLTMessage( message )   LoggingVarargs(kHLTLogNone,      NULL , NULL , __FILE__ , __LINE__ , message )
+#define HLTLog( level, message) if (CheckFilter(level))          LoggingVarargs(level, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#define HLTBenchmark( message ) LoggingVarargs(kHLTLogBenchmark, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#ifdef __DEBUG
+#define HLTDebug( message )     if (CheckFilter(kHLTLogDebug) && CheckGroup(Class_Name())) LoggingVarargs(kHLTLogDebug,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#else
+#define HLTDebug( message )
+#endif
+#define HLTInfo( message )      if (CheckFilter(kHLTLogInfo))    LoggingVarargs(kHLTLogInfo,      Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#define HLTWarning( message )   if (CheckFilter(kHLTLogWarning)) LoggingVarargs(kHLTLogWarning,   Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#define HLTError( message )     if (CheckFilter(kHLTLogError))   LoggingVarargs(kHLTLogError,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#define HLTFatal( message )     if (CheckFilter(kHLTLogFatal))   LoggingVarargs(kHLTLogFatal,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#define HLTImportant( message ) if (CheckFilter(kHLTLogImportant))LoggingVarargs(kHLTLogImportant,Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
+#endif //ALIHLTLOGGINGVARIADICFREE_H
+
 // helper macro to set the keyword
 #define HLTLogKeyword(a)    AliHLTKeyword hltlogTmpkey(this, a)
 
@@ -110,6 +131,8 @@ public:
 
   /**
    * Set a temporary keyword
+   * Keywords need to be static const strings, the class handles only
+   * pointers and assumes the strings to be persistent.
    * returns the old key value
    */
   const char* SetKeyword(const char* keyword) 
@@ -226,6 +249,11 @@ public:
    */
   static void SetLocalLoggingDefault(AliHLTComponentLogSeverity level);
 
+  /**
+   * Get default setting for local logging filter for individual objects.
+   */
+  static AliHLTComponentLogSeverity GetLocalLoggingDefault() { return fgLocalLogDefault; }
+
   /**
    * Get local logging level
    * logging filter for individual object
@@ -244,14 +272,14 @@ public:
    * @param bAppend    append to current content
    * @return const char string with the formatted message 
    */
-  static const char* BuildLogString(const char *format, va_list ap, bool bAppend=false);
+  static const char* BuildLogString(const char *format, va_list &ap, bool bAppend=false);
 
   /**
    * Set the log string from format specifier and from variable arguments.
    * @param format     format string of printf style
    * @return const char string with the formatted message 
    */
-  static const char* SetLogString(const char *format, ... );
+  static const char* SetLogString(const void* p, const char* pfmt, const char *format, ... );
 
   /**
    * Get parameter given by the external caller.
@@ -323,13 +351,14 @@ private:
   /** groups of classes not to print debug messages */
   static TString fgWhiteList;                                      //! transient
   
-  ClassDef(AliHLTLogging, 3)
+  ClassDef(AliHLTLogging, 0)
 };
 
 /* the class AliHLTKeyword is a simple helper class used by the HLTLogKeyword macro
  * HLTLogKeyword("a keyword") creates an object of AliHLTKeyword which sets the keyword for the logging class
  * the object is destroyed automatically when the current scope is left and so the keyword is set
- * to the original value
+ * to the original value. Please note that all keywords need to be static strings, only pointyers
+ * are handled and the strings required to ber persistent.
  */
 class AliHLTKeyword {
  public:
@@ -340,30 +369,18 @@ class AliHLTKeyword {
     {
     }
 
-  AliHLTKeyword(AliHLTLogging* parent, const char* keyword)
+  AliHLTKeyword(const AliHLTLogging* parent, const char* keyword)
     :
-    fpParent(parent),
+    fpParent(const_cast<AliHLTLogging*>(parent)),
     fpOriginal(NULL)
     {
-      if (parent) {
+      // the const cast is on purpose in order to be allowed to use
+      // HLTLogKeyword from const member functions
+      if (fpParent) {
        fpOriginal=fpParent->SetKeyword(keyword);
       }
     }
 
-  AliHLTKeyword(const AliHLTKeyword& kw)
-    :
-    fpParent(kw.fpParent),
-    fpOriginal(kw.fpOriginal)
-    {
-    }
-
-  AliHLTKeyword& operator=(const AliHLTKeyword& kw)
-    { 
-      fpParent=kw.fpParent;
-      fpOriginal=kw.fpOriginal;
-      return *this;
-    }
-
   ~AliHLTKeyword()
     {
       if (fpParent) {
@@ -372,6 +389,11 @@ class AliHLTKeyword {
     }
 
  private:
+  /// copy constructor prohibited
+  AliHLTKeyword(const AliHLTKeyword& kw);
+  /// assignment operator prohibited
+  AliHLTKeyword& operator=(const AliHLTKeyword& kw);
+
   AliHLTLogging* fpParent;                                         //! transient
   const char* fpOriginal;                                          //! transient
 };