(file) Return to Tracer.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/Tracer.h between version 1.1.2.1 and 1.29

version 1.1.2.1, 2001/07/31 23:57:08 version 1.29, 2007/03/28 19:34:53
Line 1 
Line 1 
 //%/////////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM,  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // The Open Group, Tivoli Systems  // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 21 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Sushma Fernandes, Hewlett-Packard Company (sushma_fernandes@hp.com)  
 //  
 // Modified By:  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #ifndef Pegasus_Tracer_h #ifndef Pegasus_Tracer_h
 #define Pegasus_Tracer_h #define Pegasus_Tracer_h
  
 #include <stdarg.h> #include <stdarg.h>
 #include <fstream.h>  
 #include <Pegasus/Common/String.h> #include <Pegasus/Common/String.h>
 #include <Pegasus/Common/System.h> #include <Pegasus/Common/System.h>
 #include <Pegasus/Common/Logger.h> #include <Pegasus/Common/Logger.h>
   #include <Pegasus/Common/InternalException.h>
 #include <Pegasus/Common/TraceComponents.h> #include <Pegasus/Common/TraceComponents.h>
 #include <Pegasus/Common/TraceFileHandler.h> #include <Pegasus/Common/TraceFileHandler.h>
   #include <Pegasus/Common/Linkage.h>
   #include <Pegasus/Common/AutoPtr.h>
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 /** Tracer implements tracing of messages to a defined file  /** Token used for tracing functions.
  */  */
   struct TracerToken
   {
       Uint32 component;
       const char* method;
   };
  
   /** Tracer implements tracing of messages to a defined file
    */
 class PEGASUS_COMMON_LINKAGE Tracer class PEGASUS_COMMON_LINKAGE Tracer
 { {
 public: public:
Line 61 
Line 73 
     static const Uint32 LEVEL3;     static const Uint32 LEVEL3;
     static const Uint32 LEVEL4;     static const Uint32 LEVEL4;
  
     // PEGASUS_REMOVE_TRACE defines the compile time inclusion of the Trace  
     // interfaces. If defined the interfaces map to empty functions  
   
     #ifdef PEGASUS_REMOVE_TRACE  
   
         inline static void trace(  
             const Uint32 traceComponent,  
             const Uint32 traceLevel,  
             const char *fmt,  
             ...)  
         {  
             // empty function  
         }  
   
         inline static void trace(  
             const char*  fileName,  
             const Uint32 lineNum,  
             const Uint32 traceComponent,  
             const Uint32 traceLevel,  
             const char* fmt,  
             ...)  
         {  
             // empty function  
         }  
   
     #else  
   
         /** Traces the given message         /** Traces the given message
             @param    traceComponent  component being traced             @param    traceComponent  component being traced
             @param    traceLevel      trace level of the trace message          @param level           trace level of the trace message
             @param    *fmt            printf style format string             @param    *fmt            printf style format string
             @param    ...             variable argument list             @param    ...             variable argument list
          */          */
         inline static void trace(      static void trace(
             const Uint32 traceComponent,             const Uint32 traceComponent,
             const Uint32 traceLevel,          const Uint32 level,
             const char *fmt,             const char *fmt,
             ...)          ...);
         {  
             va_list argList;  
   
             va_start(argList,fmt);  
             _trace(traceComponent,traceLevel,fmt,argList);  
             va_end(argList);  
         }  
  
         /** Traces the given message. Overloaded to include the filename and         /** Traces the given message. Overloaded to include the filename and
             the line number of trace origin.             the line number of trace origin.
             @param    fileName        filename of the trace originator             @param    fileName        filename of the trace originator
             @param    lineNum         line number of the trace originator             @param    lineNum         line number of the trace originator
             @param    traceComponent  component being traced             @param    traceComponent  component being traced
             @param    traceLevel      trace level of the trace message          @param level           trace level of the trace message
             @param    *fmt            printf style format string             @param    *fmt            printf style format string
             @param    ...             variable argument list             @param    ...             variable argument list
          */          */
         inline static void trace(      static void trace(
             const char* fileName,             const char* fileName,
             const Uint32 lineNum,             const Uint32 lineNum,
             const Uint32 traceComponent,             const Uint32 traceComponent,
             const Uint32 traceLevel,          const Uint32 level,
             const char* fmt,             const char* fmt,
             ...)          ...);
         {  
             va_list argList;  
   
             va_start(argList,fmt);  
             _trace(fileName,lineNum,traceComponent,traceLevel,fmt,argList);  
             va_end(argList);  
         }  
   
     #endif  
   
     // End of PEGASUS_REMOVE_TRACE  
  
     /** Traces method entry.      /** Traces the given string.  Overloaded to include the filename
           and line number of trace origin.
         @param    fileName        filename of the trace originator         @param    fileName        filename of the trace originator
         @param    lineNum         line number of the trace originator         @param    lineNum         line number of the trace originator
         @param    traceComponent  component being traced         @param    traceComponent  component being traced
         @param    methodName      method being traced          @param level           trace level of the trace message
           @param string          the string to be traced
      */      */
     inline static void traceEnter(      static void traceString(
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,         const Uint32 traceComponent,
         const char* methodName)          const Uint32 level,
     {          const String& string);
         _traceEnter( fileName, lineNum, traceComponent, "%s %s",  
             _FUNC_ENTER_MSG, methodName);  
     }  
  
     /** Traces method exit.      /** Traces the given character string.
           Overloaded to include the filename
           and line number of trace origin.
         @param    fileName        filename of the trace originator         @param    fileName        filename of the trace originator
         @param    lineNum         line number of the trace originator         @param    lineNum         line number of the trace originator
         @param    traceComponent  component being traced         @param    traceComponent  component being traced
         @param    methodName      method being traced          @param level           trace level of the trace message
           @param cstring         the character string to be traced
      */      */
     inline static void traceExit(      static void traceCString(
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,         const Uint32 traceComponent,
         const char* methodName)          const Uint32 level,
     {          const char* cstring);
         _traceExit( fileName, lineNum, traceComponent, "%s %s",  
             _FUNC_EXIT_MSG, methodName);      /** Traces the message in the given CIMException object.  The message
     }          written to the trace file will include the source filename and
           line number of the CIMException originator.
           @param traceComponent  component being traced
           @param level           trace level of the trace message
           @param CIMException    the CIMException to be traced.
        */
       static void traceCIMException(
           const Uint32 traceComponent,
           const Uint32 level,
           const CIMException& cimException);
  
     /** Set the trace file to the given file     /** Set the trace file to the given file
         @param    traceFile       full path of the trace file         @param    traceFile       full path of the trace file
         @return   0               if the filepath is valid         @return   0               if the filepath is valid
                   1               if an error occurs while opening the file in                  1          if the traceFile is an empty string or
                                   append mode                             if an error occurs while opening the file
                              in append mode
      */      */
     static Uint32 setTraceFile(const char* traceFile);     static Uint32 setTraceFile(const char* traceFile);
  
     /** Set the trace level to the given level     /** Set the trace level to the given level
         @param    traceLevel      trace level to be set          @param  level  trace level to be set
         @return   0               if trace level is valid         @return   0               if trace level is valid
                   1               if trace level is invalid                   1               if trace level is invalid
      */      */
     static Uint32 setTraceLevel(const Uint32 traceLevel);      static Uint32 setTraceLevel(const Uint32 level);
  
    /** Set components to be traced    /** Set components to be traced
        @param    traceComponents list of components to be traced, components          @param traceComponents list of components to be traced,
                  should be separated by ','                 components should be separated by ','
       */
       static void setTraceComponents(
          const String& traceComponents);
   
       /** Traces method entry.
           @param token           TracerToken
           @param fileName        filename of the trace originator
           @param lineNum         line number of the trace originator
           @param traceComponent  component being traced
           @param methodName      method being traced
        */
       static void traceEnter(
           TracerToken& token,
           const char* file,
           size_t line,
           Uint32 component,
           const char* method);
   
       /** Traces method exit.
           @param token    TracerToken containing component and method
           @param fileName filename of the trace originator
           @param lineNum  line number of the trace originator
        */
       static void traceExit(
           TracerToken& token,
           const char* file,
           size_t line);
   
       /** Validates the File Path for the trace File
           @param  filePath full path of the file
           @return 1        if the file path is valid
                   0        if the file path is invalid
        */
       static Boolean isValidFileName(const char* filePath);
   
       /** Validates the trace components
           @param  traceComponents   comma separated list of trace components
           @return 1        if the components are valid
                   0        if one or more components are invalid
        */
       static Boolean isValidComponents(const String& traceComponents);
   
       /** Validates the trace components
           @param  traceComponents   comma separated list of trace components
           @param  invalidComponents comma separated list of invalid components
           @return 1        if the components are valid
                   0        if one or more components are invalid
        */
       static Boolean isValidComponents(
           const String& traceComponents,
           String& invalidComponents);
   
       /** Specify the name of the module being traced.  If non-empty, this
           value is used as an extension to the name of the trace file.
           @param  moduleName Name of the module being traced.
        */
       static void setModuleName(const String& moduleName);
   
       /**
     */     */
     static void setTraceComponents(String traceComponents);      static Boolean isTraceOn() { return _traceOn; }
  
 private: private:
  
       /** A static single indicator if tracing is turned on allowing to
           determine the state of trace quickly without many instructions.
           Used to wrap the public static trace interface methods to avoid
           obsolete calls when tracing is turned off.
        */
       static Boolean _traceOn;
   
     static const char   _COMPONENT_SEPARATOR;     static const char   _COMPONENT_SEPARATOR;
     static const Uint32 _NUM_COMPONENTS;     static const Uint32 _NUM_COMPONENTS;
     Boolean*            _traceComponentMask;      static const Uint32 _STRLEN_MAX_UNSIGNED_INT;
       static const Uint32 _STRLEN_MAX_PID_TID;
       static const Boolean _SUCCESS;
       static const Boolean _FAILURE;
       AutoArrayPtr<Boolean> _traceComponentMask;
     Uint32              _traceLevelMask;     Uint32              _traceLevelMask;
     TraceFileHandler*   _traceHandler;      AutoPtr<TraceFileHandler> _traceHandler;
       String              _moduleName;
     static Tracer*      _tracerInstance;     static Tracer*      _tracerInstance;
  
     // Message Strings for fucntion Entry and Exit      // Message Strings for function Entry and Exit
     static const char _FUNC_ENTER_MSG[];      static const char _METHOD_ENTER_MSG[];
     static const char _FUNC_EXIT_MSG[];      static const char _METHOD_EXIT_MSG[];
  
     // Message Strings for Logger     // Message Strings for Logger
     static const char _LOG_MSG1[];      static const char _LOG_MSG[];
     static const char _LOG_MSG2[];  
  
     // Checks if trace is enabled for the given component and trace level     // Checks if trace is enabled for the given component and trace level
     // @param    traceComponent  component being traced     // @param    traceComponent  component being traced
     // @param    traceLevel      level of the trace message      // @param    level      level of the trace message
     // @return   0               if the component and level are not enabled     // @return   0               if the component and level are not enabled
     //           1               if the component and level are enabled     //           1               if the component and level are enabled
     static Boolean _isTraceEnabled(     static Boolean _isTraceEnabled(
         const Uint32 traceComponent,         const Uint32 traceComponent,
         const Uint32 traceLevel);          const Uint32 level);
  
     // Traces the given message     // Traces the given message
     //  @param    traceComponent  component being traced     //  @param    traceComponent  component being traced
     //  @param    traceLevel      level of the trace message  
     //  @param    *fmt            printf style format string     //  @param    *fmt            printf style format string
     //  @param    argList         variable argument list     //  @param    argList         variable argument list
     static void _trace(     static void _trace(
         const Uint32 traceComponent,         const Uint32 traceComponent,
         const Uint32 traceLevel,  
         const char* fmt,         const char* fmt,
         va_list argList);         va_list argList);
  
     // Traces the given message. Overloaded to include the file name and the     // Traces the given message. Overloaded to include the file name and the
     // line number as one of the parameters.     // line number as one of the parameters.
     // @param    traceComponent  component being traced     // @param    traceComponent  component being traced
     // @param    traceLevel      level of the trace message  
     // @param    message         message header (file name:line number)     // @param    message         message header (file name:line number)
     // @param    *fmt            printf style format string     // @param    *fmt            printf style format string
     // @param    argList         variable argument list     // @param    argList         variable argument list
Line 236 
Line 282 
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,         const Uint32 traceComponent,
         const Uint32 traceLevel,  
         const char* fmt,         const char* fmt,
         va_list argList);         va_list argList);
  
     // Called by all the trace interfaces to log message to the      //  Traces a given character string.  Overloaded to include the filename
     // trace file      //  and line number of trace origin.
     // @param    fileName        filename of the trace originator     // @param    fileName        filename of the trace originator
     // @param    lineNum         line number of the trace originator     // @param    lineNum         line number of the trace originator
     // @param    traceComponent  component being traced     // @param    traceComponent  component being traced
       //  @param    cstring         the character string to be traced
       //
       static void _traceCString(
           const char* fileName,
           const Uint32 lineNum,
           const Uint32 traceComponent,
           const char* cstring);
   
       //  Traces the message in the given CIMException object.  The message
       //  to be written to the trace file will include the source filename and
       //  line number of the CIMException originator.
       //  @param    traceComponent  component being traced
       //  @param    CIMException    the CIMException to be traced.
       //
       static void _traceCIMException(
           const Uint32 traceComponent,
           const CIMException& cimException);
   
       // Called by all the trace interfaces to log message
       // consisting of a single character string to the trace file
       // @param    traceComponent  component being traced
       // @param    cstring         the string to be traced
       static void _traceCString(
           const Uint32 traceComponent,
           const char* message,
           const char* cstring);
   
       // Called by all the trace interfaces to log message
       // with variable number of arguments to the trace file
       // @param    traceComponent  component being traced
     // @param    *fmt            printf style format string     // @param    *fmt            printf style format string
     // @param    argList         variable argument list     // @param    argList         variable argument list
     static void _trace(     static void _trace(
Line 253 
Line 328 
         const char* fmt,         const char* fmt,
         va_list argList);         va_list argList);
  
     // Traces method enter      // Traces method enter/exit
     // @param    fileName        filename of the trace originator     // @param    fileName        filename of the trace originator
     // @param    lineNum         line number of the trace originator     // @param    lineNum         line number of the trace originator
     // @param    traceComponent  component being traced     // @param    traceComponent  component being traced
     // @param    *fmt            printf style format string      // @param    method          name of the method
     // @param    ...             variable argument list      static void _traceMethod(
     static void _traceEnter(  
         const char* fileName,  
         const Uint32 lineNum,  
         const Uint32 traceComponent,  
         const char* fmt,  
         ...);  
   
     // Traces method exit  
     // @param    fileName        filename of the trace originator  
     // @param    traceComponent  component being traced  
     // @param    *fmt            printf style format string  
     // @param    ...             variable argument list  
     static void _traceExit(  
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,         const Uint32 traceComponent,
         const char* fmt,          const char* methodEntryExit,
         ...);          const char* method);
  
     // Tracer constructor     // Tracer constructor
     // Constructor is private to prevent construction of Tracer objects     // Constructor is private to prevent construction of Tracer objects
Line 291 
Line 353 
     static Tracer* _getInstance();     static Tracer* _getInstance();
 }; };
  
 // Define the macros for method entry/exit  //==============================================================================
   //
   // PEGASUS_REMOVE_TRACE defines the compile time inclusion of the Trace
   // interfaces. If defined the interfaces map to empty functions.
   //
   //==============================================================================
   
 #ifdef PEGASUS_REMOVE_TRACE #ifdef PEGASUS_REMOVE_TRACE
     #define PEG_FUNC_ENTER(traceComponent,methodName)  
     #define PEG_FUNC_EXIT(traceComponent,methodName)  
 #else  
     /** Macro for tracing method entry  
         @param    traceComponent  component being traced  
         @param    methodName      name of the method  
      */  
     #define PEG_FUNC_ENTER(traceComponent,methodName) \  
         Tracer::traceEnter(__FILE__, __LINE__,traceComponent,methodName)  
  
     /** Macro for tracing method exit  inline void Tracer::trace(
         @param    traceComponent  component being traced      const Uint32 traceComponent,
         @param    methodName      name of the method      const Uint32 level,
      */      const char *fmt,
     #define PEG_FUNC_EXIT(traceComponent,methodName) \      ...)
         Tracer::traceExit(__FILE__,__LINE__,traceComponent,methodName)  {
       // empty function
   }
   
   inline void Tracer::trace(
       const char* fileName,
       const Uint32 lineNum,
       const Uint32 traceComponent,
       const Uint32 level,
       const char* fmt,
       ...)
   {
       // empty function
   }
   
   inline void Tracer::traceString(
       const char* fileName,
       const Uint32 lineNum,
       const Uint32 traceComponent,
       const Uint32 level,
       const String& string)
   {
       // empty function
   }
   
   inline void Tracer::traceCString(
       const char* fileName,
       const Uint32 lineNum,
       const Uint32 traceComponent,
       const Uint32 level,
       const char* cstring)
   {
       // empty function
   }
   
   inline void Tracer::traceCIMException(
       const Uint32 traceComponent,
       const Uint32 level,
       const CIMException& cimException)
   {
       // empty function
   }
   
   inline Uint32 Tracer::setTraceFile(const char* traceFile)
   {
       // empty function
       return 0;
   }
   
   inline Uint32 Tracer::setTraceLevel(const Uint32 level)
   {
       // empty function
       return 0;
   }
   
   inline void Tracer::setTraceComponents(const String& traceComponents)
   {
       // empty function
   }
   
   #endif /* PEGASUS_REMOVE_TRACE */
   
   //==============================================================================
   //
   // Tracing macros
   //
   //==============================================================================
   
   // Defines a variable that bypasses inclusion of line and filename in output.
   // #define PEGASUS_NO_FILE_LINE_TRACE=1 to exclude file names and line numbers
   #ifdef PEGASUS_NO_FILE_LINE_TRACE
   # define PEGASUS_COMMA_FILE_LINE /* empty */
   # define PEGASUS_FILE_LINE_COMMA /* empty */
   #else
   # define PEGASUS_COMMA_FILE_LINE ,__FILE__,__LINE__
   # define PEGASUS_FILE_LINE_COMMA __FILE__,__LINE__,
 #endif #endif
  
   #ifdef PEGASUS_REMOVE_TRACE
   
   # define PEG_METHOD_ENTER(comp,meth)
   # define PEG_METHOD_EXIT()
   # define PEG_TRACE_STRING(comp,level,string)
   # define PEG_TRACE(VAR_ARGS)
   # define PEG_TRACE_CSTRING(comp,level,chars)
   
   #else /* PEGASUS_REMOVE_TRACE */
   
   # define PEG_METHOD_ENTER(comp, meth) \
       TracerToken __tracerToken; \
       do \
       { \
           if (Tracer::isTraceOn()) \
               Tracer::traceEnter( \
                   __tracerToken PEGASUS_COMMA_FILE_LINE, comp, meth); \
       } \
       while (0)
   
   #  define PEG_METHOD_EXIT() \
       do \
       { \
           if (Tracer::isTraceOn()) \
               Tracer::traceExit(__tracerToken PEGASUS_COMMA_FILE_LINE); \
       } \
       while (0)
   
   // Macro for Trace String.  the do construct allows this to appear
   // as a single statement.
   # define PEG_TRACE_STRING(comp, level, string) \
       do \
       { \
           if (Tracer::isTraceOn()) \
               Tracer::traceString(PEGASUS_FILE_LINE_COMMA comp, level, string); \
       } \
       while (0)
   
   // Macro to trace character lists.  the do construct allows this to appear
   // as a single statement.
   # define PEG_TRACE_CSTRING(comp, level, chars) \
       do \
       { \
           if (Tracer::isTraceOn()) \
               Tracer::traceCString(PEGASUS_FILE_LINE_COMMA comp, level, chars); \
       } \
       while (0)
   
   // Macro for Trace variable number of arguments with format string. The trace
   // test is included becase of the possible cost of preparing the variable
   // number of arguments on each call.  The d construct allows this to be
   // treated as a single statement.
   # define PEG_TRACE(VAR_ARGS) \
       do \
       { \
           if (Tracer::isTraceOn()) \
               Tracer::trace VAR_ARGS; \
       } \
       while (0)
   
   #endif /* !PEGASUS_REMOVE_TRACE */
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
   
 #endif /* Pegasus_Tracer_h */ #endif /* Pegasus_Tracer_h */


Legend:
Removed from v.1.1.2.1  
changed lines
  Added in v.1.29

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2