]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/BASE/AliHLTLogging.h
correcting HLT logging: the pointers of the objects are only printed in debug mode
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTLogging.h
index 054e4ab143a1b3bcad592e29bd1e4a0d4622066d..769fb07a58f778cf3c1a44e86cbf524b5b4c18a9 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,11 +52,71 @@ 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)
 
 #define HLT_DEFAULT_LOG_KEYWORD "no key"
 
+/**
+ * @class AliHLTLogging
+ * Basic logging class. All classes inherit the besic HLT logging functionality.
+ * Logging levels are controlled by a global logging filter and a local logging
+ * filter.
+ * 
+ * @section alihlt_logging_levels Logging Levels
+ * Logging levels are switched by a bit pattern,  AliHLTComponentLogSeverity {
+ * - ::kHLTLogNone no logging (0)
+ * - ::kHLTLogBenchmark benchmark messages (0x1)
+ * - ::kHLTLogDebug debug messages (0x2)
+ * - ::kHLTLogInfo info messages (0x4)
+ * - ::kHLTLogWarning warning messages (0x8)
+ * - ::kHLTLogError error messages (0x10)
+ * - ::kHLTLogFatal fatal error messages (0x20)
+ * - ::kHLTLogImportant few important messages not to be filtered out (0x40)
+ * - ::kHLTLogAll special value to enable all messages (0x7f)
+ * - ::kHLTLogDefault the default logging level: Warning, Error, Fatal, Important (0x79)
+ *
+ * @section alihlt_logging_filter Logging Filters
+ * The class provides a global and a local logging filter, the AND beween both
+ * defines whether a message is printed or not.
+ *
+ * The global filter is by default set to ::kHLTLogAll. Please note that AliHLTSystem
+ * changes the global logging level to ::kHLTLogDefault. The global filter can be
+ * adjusted by means of SetGlobalLoggingLevel().
+ *
+ * The local filter is set to ::kHLTLogAll and can be adjusted by
+ * SetLocalLoggingLevel(). The default can be changed for all objects by
+ * SetLocalLoggingDefault(). Please note that a change of the default level only
+ * applies to objects generated after the change of the default.
+ *
+ * @section alihlt_logging_external Redirection
+ * - external logging function
+ * - keyword
+ *
+ * @section alihlt_logging_aliroot AliRoot Redirection
+ * - switching of redirection
+ * - logging options in AliSimulation/AliReconstruction
+ *
+ * @ingroup alihlt_component
+ */
 class AliHLTLogging {
 public:
   AliHLTLogging();
@@ -119,12 +182,20 @@ public:
    */
   int Logging( AliHLTComponentLogSeverity severity, const char* origin, const char* keyword, const char* message, ... );
 
-  /*
+  /**
    * Logging function with two origin parameters, used by the log macros
    */
-  int LoggingVarargs(AliHLTComponentLogSeverity severity, 
-                    const char* originClass, const char* originFunc,
-                    const char* file, int line, ... ) const;
+  virtual int LoggingVarargs(AliHLTComponentLogSeverity severity, 
+                            const char* originClass, const char* originFunc,
+                            const char* file, int line, ... ) const;
+
+  /**
+   * Send formatted string to the different channels
+   */
+  int SendMessage(AliHLTComponentLogSeverity severity, 
+                 const char* originClass, const char* originFunc,
+                 const char* file, int line,
+                 const char* message) const;
 
   /**
    * Evaluate the group of the debug message from the class name.
@@ -170,6 +241,12 @@ public:
    */
   virtual void SetLocalLoggingLevel(AliHLTComponentLogSeverity level);
 
+  /**
+   * Set local logging default
+   * Default logging filter for individual objects.
+   */
+  static void SetLocalLoggingDefault(AliHLTComponentLogSeverity level);
+
   /**
    * Get local logging level
    * logging filter for individual object
@@ -185,9 +262,17 @@ public:
    * Build the log string from format specifier and variadac arguments
    * @param format     format string of printf style
    * @param ap         opened and initialized argument list
+   * @param bAppend    append to current content
    * @return const char string with the formatted message 
    */
-  static const char* BuildLogString(const char *format, va_list ap);
+  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 void* p, const char* pfmt, const char *format, ... );
 
   /**
    * Get parameter given by the external caller.
@@ -233,6 +318,8 @@ private:
   static  AliHLTComponentLogSeverity fgGlobalLogFilter;            // see above
   /** the local logging filter for one class */
   AliHLTComponentLogSeverity fLocalLogFilter;                      // see above
+  /** the global logging filter */
+  static  AliHLTComponentLogSeverity fgLocalLogDefault;            // see above
   /** logging callback from the framework */
   static AliHLTfctLogging fgLoggingFunc;                           // see above
   /** default keyword */