(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.27.4.1 and 1.54

version 1.27.4.1, 2007/04/04 11:04:44 version 1.54, 2013/07/04 09:54:17
Line 1 
Line 1 
 //%2006////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development  // Licensed to The Open Group (TOG) under one or more contributor license
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;  // this work for additional information regarding copyright ownership.
 // IBM Corp.; EMC Corporation, The Open Group.  // Each contributor licenses this file to you under the OpenPegasus Open
 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;  // Source License; you may not use this file except in compliance with the
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.  // License.
 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;  //
 // EMC Corporation; VERITAS Software Corporation; The Open Group.  // Permission is hereby granted, free of charge, to any person obtaining a
 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;  // copy of this software and associated documentation files (the "Software"),
 // EMC Corporation; Symantec Corporation; The Open Group.  // to deal in the Software without restriction, including without limitation
 //  // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 // Permission is hereby granted, free of charge, to any person obtaining a copy  // and/or sell copies of the Software, and to permit persons to whom the
 // of this software and associated documentation files (the "Software"), to  // Software is furnished to do so, subject to the following conditions:
 // deal in the Software without restriction, including without limitation the  //
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  // The above copyright notice and this permission notice shall be included
 // sell copies of the Software, and to permit persons to whom the Software is  // in all copies or substantial portions of the Software.
 // furnished to do so, subject to the following conditions:  //
 //  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT  // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
 // //
 //==============================================================================  //////////////////////////////////////////////////////////////////////////
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #ifndef Pegasus_Tracer_h #ifndef Pegasus_Tracer_h
 #define Pegasus_Tracer_h #define Pegasus_Tracer_h
  
 #include <stdarg.h>  #include <cstdarg>
 #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/InternalException.h>
 #include <Pegasus/Common/TraceComponents.h>  #include <Pegasus/Common/TraceHandler.h>
 #include <Pegasus/Common/TraceFileHandler.h>  
 #include <Pegasus/Common/Linkage.h> #include <Pegasus/Common/Linkage.h>
 #include <Pegasus/Common/AutoPtr.h>  #include <Pegasus/Common/SharedPtr.h>
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
   /**
       Trace component identifiers.  This list must be kept in sync with the
       TRACE_COMPONENT_LIST in Tracer.cpp.
       The tracer uses the _traceComponentMask 64bit field to mask
       the user configured components.
   
       Please ensure that no more than 64 Trace Component ID's are specified.
   */
   enum TraceComponentId
   {
       TRC_XML,
       TRC_XML_IO,
       TRC_HTTP,
       TRC_REPOSITORY,
       TRC_DISPATCHER,
       TRC_OS_ABSTRACTION,
       TRC_CONFIG,
       TRC_IND_HANDLER,
       TRC_AUTHENTICATION,
       TRC_AUTHORIZATION,
       TRC_USER_MANAGER,
       TRC_SHUTDOWN,
       TRC_SERVER,
       TRC_INDICATION_SERVICE,
       TRC_MESSAGEQUEUESERVICE,
       TRC_PROVIDERMANAGER,
       TRC_OBJECTRESOLUTION,
       TRC_WQL,
       TRC_CQL,
       TRC_THREAD,
       TRC_EXP_REQUEST_DISP,
       TRC_SSL,
       TRC_CONTROLPROVIDER,
       TRC_CIMOM_HANDLE,
       TRC_L10N,
       TRC_EXPORT_CLIENT,
       TRC_LISTENER,
       TRC_DISCARDED_DATA,
       TRC_PROVIDERAGENT,
       TRC_IND_FORMATTER,
       TRC_STATISTICAL_DATA,
       TRC_CMPIPROVIDER,
       TRC_INDICATION_GENERATION,
       TRC_INDICATION_RECEIPT,
       TRC_CMPIPROVIDERINTERFACE,
       TRC_WSMSERVER,
       TRC_LOGMSG,
       TRC_WMI_MAPPER_CONSUMER,
       TRC_INTERNALPROVIDER
   };
   
 /** Token used for tracing functions. /** Token used for tracing functions.
 */ */
 struct TracerToken struct TracerToken
 { {
     Uint32 component;      TraceComponentId component;
     const char* method;     const char* method;
 }; };
  
Line 60 
Line 108 
 { {
 public: public:
  
       /** Trace Components list defines the strings repesenting each
           TraceComponentId entry. Externalized to allow display of the
           possible list of trace components.  The size of this list is
           defined in _NUM_COMPONENTS variable.
        */
       static char const* TRACE_COMPONENT_LIST[];
   
       /** Trace facilities
           File - tracing occurs to the trace file
           Log  - tracing occurs through the Pegasus Logger class
           Keep the TRACE_FACILITY_LIST in sync with the TRACE_FACILITY_INDEX,
           so that the index matches the according string in the list.
        */
       static char const* TRACE_FACILITY_LIST[];
   
       enum TRACE_FACILITY_INDEX
       {
           TRACE_FACILITY_FILE = 0,
           TRACE_FACILITY_LOG  = 1,
           TRACE_FACILITY_MEMORY = 2
       };
   
   
     /** Levels of trace     /** Levels of trace
         Trace messages are written to the trace file only if they are at or         Trace messages are written to the trace file only if they are at or
         above a given trace level         above a given trace level
         LEVEL1 - Function Entry/Exit          LEVEL1 - Severe and log messages
         LEVEL2 - Basic flow trace messages, low data detail         LEVEL2 - Basic flow trace messages, low data detail
         LEVEL3 - Inter-function logic flow, medium data detail         LEVEL3 - Inter-function logic flow, medium data detail
         LEVEL4 - High data detail         LEVEL4 - High data detail
Line 73 
Line 144 
     static const Uint32 LEVEL3;     static const Uint32 LEVEL3;
     static const Uint32 LEVEL4;     static const Uint32 LEVEL4;
  
     /** Traces the given message  
         @param traceComponent  component being traced  
         @param level           trace level of the trace message  
         @param *fmt            printf style format string  
         @param ...             variable argument list  
      */  
     static void trace(  
         const Uint32 traceComponent,  
         const Uint32 level,  
         const char *fmt,  
         ...);  
   
     /** Traces the given message. Overloaded to include the filename and  
         the line number of trace origin.  
         @param fileName        filename of the trace originator  
         @param lineNum         line number of the trace originator  
         @param traceComponent  component being traced  
         @param level           trace level of the trace message  
         @param *fmt            printf style format string  
         @param ...             variable argument list  
      */  
     static void trace(  
         const char* fileName,  
         const Uint32 lineNum,  
         const Uint32 traceComponent,  
         const Uint32 level,  
         const char* fmt,  
         ...);  
   
     /** Traces the given string.  Overloaded to include the filename  
         and line number of trace origin.  
         @param fileName        filename of the trace originator  
         @param lineNum         line number of the trace originator  
         @param traceComponent  component being traced  
         @param level           trace level of the trace message  
         @param string          the string to be traced  
      */  
     static void traceString(  
         const char* fileName,  
         const Uint32 lineNum,  
         const Uint32 traceComponent,  
         const Uint32 level,  
         const String& string);  
   
     /** Traces the given character string.     /** Traces the given character string.
         Overloaded to include the filename         Overloaded to include the filename
         and line number of trace origin.         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 level           trace level of the trace message  
         @param cstring         the character string to be traced         @param cstring         the character string to be traced
      */      */
     static void traceCString(     static void traceCString(
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,          const TraceComponentId traceComponent,
         const Uint32 level,  
         const char* cstring);         const char* cstring);
  
     /** Traces the message in the given CIMException object.  The message     /** Traces the message in the given CIMException object.  The message
Line 138 
Line 163 
         line number of the CIMException originator.         line number of the CIMException originator.
         @param traceComponent  component being traced         @param traceComponent  component being traced
         @param level           trace level of the trace message         @param level           trace level of the trace message
         @param CIMException    the CIMException to be traced.          @param cimException    the CIMException to be traced.
      */      */
     static void traceCIMException(     static void traceCIMException(
         const Uint32 traceComponent,          const TraceComponentId traceComponent,
         const Uint32 level,         const Uint32 level,
         const CIMException& cimException);         const CIMException& cimException);
  
       /** Formats the message given in data as hex dump if binary is true
           @param data      Message to be formatted
           @param binary    flag indicating if message is binary or not
       */
       static SharedArrayPtr<char> traceFormatChars(
           const Buffer& data,
           bool binary);
   
       /** Gets an HTTP request message.
   
           Given a binary HTTP request message(application/x-openpegasus
           this method returns the request message formatted in hex dump format
           and returns.
   
           Given an HTTP request message, this method checks if the
           message contains a "Basic" authorization header.
   
           If true, the username/passwd is suppressed and returned.
           Otherwise the request message is returned without any changes.
   
           @param requestMessage  requestMessage to be checked
   
           @return request message
   
       */
       static SharedArrayPtr<char> getHTTPRequestMessage(
           const Buffer& requestMessage);
   
     /** 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
Line 168 
Line 221 
     static void setTraceComponents(     static void setTraceComponents(
        const String& traceComponents);        const String& traceComponents);
  
       /** Set trace facility to be used
           @param traceFacility facility to be used for tracing,
                  for example Log or File.
           @return 0      if trace facility is valid
                   1      if trace facility is invalid
       */
       static Uint32 setTraceFacility(const String& traceFacility);
   
       /** Get trace facility currently in use
           @return TRACE_FACILITY_FILE - if trace facility is file
                   TRACE_FACILITY_LOG - if trace facility is the log
                   TRACE_FACILITY_MEMORY - if trace facility is memory tracing
       */
       static Uint32 getTraceFacility();
   
       /** Set buffer size to be used for the memory tracing facility
           @param bufferSize buffer size in Kbyte to be used for memory tracing
           @return true   if function was successfully.
       */
       static Boolean setTraceMemoryBufferSize(Uint32 bufferSize);
   
       /** Set the Max trace File Size and used for the File tracing
           @param maxLogFileSizeBytes size of cimserver.trc
       */
       static void setMaxTraceFileSize (const String &size);
   
       /** Set the Max trace File number
           @param maxLogFileNumber number of cimserver.trc in trace folder
       */
       static void setMaxTraceFileNumber(const String &numberOfFiles);
   
       /** Flushes the trace buffer to traceFilePath. This method will only
           have an effect when traceFacility=Memory.
       */
       static void flushTrace();
   
     /** Traces method entry.     /** Traces method entry.
         @param token           TracerToken         @param token           TracerToken
         @param fileName        filename of the trace originator         @param fileName        filename of the trace originator
Line 179 
Line 268 
         TracerToken& token,         TracerToken& token,
         const char* file,         const char* file,
         size_t line,         size_t line,
         Uint32 component,          TraceComponentId traceComponent,
         const char* method);         const char* method);
  
     /** Traces method exit.     /** Traces method exit.
Line 216 
Line 305 
         const String& traceComponents,         const String& traceComponents,
         String& invalidComponents);         String& invalidComponents);
  
     /** Specify the name of the module being traced.  If non-empty, this      /** Validates the trace facility string value
           @param  traceFacility   The trace facility as string
           @return 1        if the trace facility is valid
                   0        if the trace facility is invalid
        */
       static Boolean isValidTraceFacility( const String& traceFacility );
   
       /** Signals the trace to be running OOP and provides the file name
           extension of  the trace file.  If non-empty, this
         value is used as an extension to the name of the trace file.         value is used as an extension to the name of the trace file.
         @param  moduleName Name of the module being traced.          @param  oopTraceFileExtension Trace file extension.
      */      */
     static void setModuleName(const String& moduleName);      static void setOOPTraceFileExtension(const String& oopTraceFileExtension);
  
     /**     /**
     */     */
     static Boolean isTraceOn() { return _traceOn; }     static Boolean isTraceOn() { return _traceOn; }
  
       // Checks if trace is enabled for the given component and trace level
       // @param    traceComponent  component being traced
       // @param    level      level of the trace message
       // @return   0               if the component and level are not enabled
       //           1               if the component and level are enabled
       static Boolean isTraceEnabled(
           const TraceComponentId traceComponent,
           const Uint32 traceLevel)
       {
           return ((traceLevel & _traceLevelMask) &&
                   (_traceComponentMask & ((Uint64)1 << traceComponent)));
       }
   
       //
       //Converts a given string representation of a trace property into Uint32.
       //If the string reperesantation is not valid, the returnd bufferSize is 0.
       //@param  traceProperty     The trace property value as string
       //@param  valueInUint32     Returns the value as Uint32.
       //@return Boolean           True if specified size is a
       //                          valid string representaion of a Uint32.
       static Boolean tracePropertyToUint32( const String& traceProperty,
                 Uint32& valueInUint32 );
   
 private: private:
  
     /** A static single indicator if tracing is turned on allowing to     /** A static single indicator if tracing is turned on allowing to
Line 235 
Line 355 
      */      */
     static Boolean _traceOn;     static Boolean _traceOn;
  
       /** Internal only Levels of trace
           These cannot be used in any of the trace calls directly, but are set
           by methods of the Tracer class for specific purposes, such as trace
           Enter and traceExit.
           LEVEL0 - Trace is switched off
           LEVEL5 - used for method enter & exit
        */
       static const Uint32 LEVEL0;
       static const Uint32 LEVEL5;
   
     static const char   _COMPONENT_SEPARATOR;     static const char   _COMPONENT_SEPARATOR;
     static const Uint32 _NUM_COMPONENTS;     static const Uint32 _NUM_COMPONENTS;
     static const Uint32 _STRLEN_MAX_UNSIGNED_INT;     static const Uint32 _STRLEN_MAX_UNSIGNED_INT;
     static const Uint32 _STRLEN_MAX_PID_TID;     static const Uint32 _STRLEN_MAX_PID_TID;
     static const Boolean _SUCCESS;      static Uint64                _traceComponentMask;
     static const Boolean _FAILURE;      static Uint32                _traceLevelMask;
     AutoArrayPtr<Boolean> _traceComponentMask;  
     Uint32              _traceLevelMask;  
     AutoPtr<TraceFileHandler> _traceHandler;  
     String              _moduleName;  
     static Tracer*      _tracerInstance;     static Tracer*      _tracerInstance;
       Uint32                _traceMemoryBufferSize;
       Uint32                _traceFacility;
       Boolean               _runningOOP;
       TraceHandler*         _traceHandler;
       String                _traceFile;
       String                _oopTraceFileExtension;
   
  
     // Message Strings for function Entry and Exit     // Message Strings for function Entry and Exit
     static const char _METHOD_ENTER_MSG[];     static const char _METHOD_ENTER_MSG[];
     static const char _METHOD_EXIT_MSG[];     static const char _METHOD_EXIT_MSG[];
  
     // Message Strings for Logger      // Function formats size bytes of binary data given in data in a nicely
     static const char _LOG_MSG[];      // readable hex format and writes the output to targetBuffer
       // Return value: Pointer to one byte behind last position that was written
     // Checks if trace is enabled for the given component and trace level      static char* _formatHexDump(
     // @param    traceComponent  component being traced          char* targetBuffer,
     // @param    level      level of the trace message          const char* data,Uint32 size);
     // @return   0               if the component and level are not enabled  
     //           1               if the component and level are enabled      // Factory function to create an instance of the matching trace handler
     static Boolean _isTraceEnabled(      // for the given type of traceFacility.
         const Uint32 traceComponent,      // @param    traceFacility  type of trace handler to create
         const Uint32 level);      void _setTraceHandler( Uint32 traceFacility );
   
     // Traces the given message      // Validates if the given file path if it is eligible for writing traces.
     //  @param    traceComponent  component being traced      // @param    fileName      a file intended to be used to write traces
     //  @param    *fmt            printf style format string      static Boolean _isValidTraceFile(String fileName);
     //  @param    argList         variable argument list  
     static void _trace(  
         const Uint32 traceComponent,  
         const char* fmt,  
         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.
Line 281 
Line 409 
     static void _trace(     static void _trace(
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,          const TraceComponentId traceComponent,
         const char* fmt,         const char* fmt,
         va_list argList);         va_list argList);
  
     //  Traces a given character string.  Overloaded to include the filename  
     //  and line number of trace origin.  
     //  @param    fileName        filename of the trace originator  
     //  @param    lineNum         line number of the trace originator  
     //  @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     //  Traces the message in the given CIMException object.  The message
     //  to be written to the trace file will include the source filename and     //  to be written to the trace file will include the source filename and
     //  line number of the CIMException originator.     //  line number of the CIMException originator.
Line 305 
Line 420 
     //  @param    CIMException    the CIMException to be traced.     //  @param    CIMException    the CIMException to be traced.
     //     //
     static void _traceCIMException(     static void _traceCIMException(
         const Uint32 traceComponent,          const TraceComponentId traceComponent,
         const CIMException& cimException);         const CIMException& cimException);
  
     // Called by all the trace interfaces to log message     // Called by all the trace interfaces to log message
Line 313 
Line 428 
     // @param    traceComponent  component being traced     // @param    traceComponent  component being traced
     // @param    cstring         the string to be traced     // @param    cstring         the string to be traced
     static void _traceCString(     static void _traceCString(
         const Uint32 traceComponent,          const TraceComponentId traceComponent,
         const char* message,         const char* message,
         const char* cstring);         const char* cstring);
  
Line 323 
Line 438 
     // @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 TraceComponentId traceComponent,
         const char* message,         const char* message,
         const char* fmt,         const char* fmt,
         va_list argList);         va_list argList);
Line 336 
Line 451 
     static void _traceMethod(     static void _traceMethod(
         const char* fileName,         const char* fileName,
         const Uint32 lineNum,         const Uint32 lineNum,
         const Uint32 traceComponent,          const TraceComponentId traceComponent,
         const char* methodEntryExit,         const char* methodEntryExit,
         const char* method);         const char* method);
  
Line 351 
Line 466 
     // Returns the Singleton instance of the Tracer     // Returns the Singleton instance of the Tracer
     // @return   Tracer*  Instance of Tracer     // @return   Tracer*  Instance of Tracer
     static Tracer* _getInstance();     static Tracer* _getInstance();
   
       friend class TraceCallFrame;
       friend class TracePropertyOwner;
       friend class TraceMemoryHandler;
       friend class TraceFileHandler;
 }; };
  
 //============================================================================== //==============================================================================
Line 362 
Line 482 
  
 #ifdef PEGASUS_REMOVE_TRACE #ifdef PEGASUS_REMOVE_TRACE
  
 inline void Tracer::trace(  inline void Tracer::traceCString(
     const Uint32 traceComponent,      const char* fileName,
     const Uint32 level,      const Uint32 lineNum,
     const char *fmt,      const TraceComponentId traceComponent,
     ...)      const char* cstring)
 { {
     // empty function     // empty function
 } }
  
 inline void Tracer::trace(  inline void Tracer::traceCIMException(
     const char* fileName,      const TraceComponentId traceComponent,
     const Uint32 lineNum,  
     const Uint32 traceComponent,  
     const Uint32 level,     const Uint32 level,
     const char* fmt,      const CIMException& cimException)
     ...)  
 { {
     // empty function     // empty function
 } }
  
 inline void Tracer::traceString(  static SharedArrayPtr<char> getHTTPRequestMessage(
     const char* fileName,          const Buffer& requestMessage)
     const Uint32 lineNum,  
     const Uint32 traceComponent,  
     const Uint32 level,  
     const String& string)  
 { {
     // empty function     // empty function
       return SharedArrayPtr<char>();
 } }
  
 inline void Tracer::traceCString(  inline Uint32 Tracer::setTraceFile(const char* traceFile)
     const char* fileName,  
     const Uint32 lineNum,  
     const Uint32 traceComponent,  
     const Uint32 level,  
     const char* cstring)  
 { {
     // empty function     // empty function
       return 0;
 } }
  
 inline void Tracer::traceCIMException(  inline Uint32 Tracer::setTraceLevel(const Uint32 level)
     const Uint32 traceComponent,  
     const Uint32 level,  
     const CIMException& cimException)  
 { {
     // empty function     // empty function
       return 0;
 } }
  
 inline Uint32 Tracer::setTraceFile(const char* traceFile)  inline void Tracer::setTraceComponents(const String& traceComponents)
   {
       // empty function
   }
   
   inline Uint32 Tracer::setTraceFacility(const String& traceFacility)
 { {
     // empty function     // empty function
     return 0;     return 0;
 } }
  
 inline Uint32 Tracer::setTraceLevel(const Uint32 level)  inline Uint32 Tracer::getTraceFacility()
 { {
     // empty function     // empty function
     return 0;     return 0;
 } }
  
 inline void Tracer::setTraceComponents(const String& traceComponents)  inline Boolean Tracer::setTraceMemoryBufferSize(Uint32 bufferSize)
   {
       // empty function
       return true;
   }
   
   inline void Tracer::flushTrace()
 { {
     // empty function     // empty function
       return;
 } }
  
   
   
 #endif /* PEGASUS_REMOVE_TRACE */ #endif /* PEGASUS_REMOVE_TRACE */
  
 //============================================================================== //==============================================================================
Line 449 
Line 571 
  
 # define PEG_METHOD_ENTER(comp,meth) # define PEG_METHOD_ENTER(comp,meth)
 # define PEG_METHOD_EXIT() # define PEG_METHOD_EXIT()
 # define PEG_TRACE_STRING(comp,level,string)  
 # define PEG_TRACE(VAR_ARGS) # define PEG_TRACE(VAR_ARGS)
 # define PEG_TRACE_CSTRING(comp,level,chars) # define PEG_TRACE_CSTRING(comp,level,chars)
  
 #else /* PEGASUS_REMOVE_TRACE */ #else /* PEGASUS_REMOVE_TRACE */
  
   // remover trace code for method enter/exit
   # ifdef  PEGASUS_REMOVE_METHODTRACE
   #  define PEG_METHOD_ENTER(comp,meth)
   #  define PEG_METHOD_EXIT()
   # else
 # define PEG_METHOD_ENTER(comp, meth) \ # define PEG_METHOD_ENTER(comp, meth) \
     TracerToken __tracerToken; \     TracerToken __tracerToken; \
       __tracerToken.method = 0; \
     do \     do \
     { \     { \
         if (Tracer::isTraceOn()) \         if (Tracer::isTraceOn()) \
             Tracer::traceEnter(__tracerToken PEGASUS_COMMA_FILE_LINE, comp, meth); \              Tracer::traceEnter( \
                   __tracerToken PEGASUS_COMMA_FILE_LINE, comp, meth); \
     } \     } \
     while (0)     while (0)
  
Line 471 
Line 599 
             Tracer::traceExit(__tracerToken PEGASUS_COMMA_FILE_LINE); \             Tracer::traceExit(__tracerToken PEGASUS_COMMA_FILE_LINE); \
     } \     } \
     while (0)     while (0)
   # endif
 // 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 // Macro to trace character lists.  the do construct allows this to appear
 // as a single statement. // as a single statement.
Line 488 
Line 607 
     do \     do \
     { \     { \
         if (Tracer::isTraceOn()) \         if (Tracer::isTraceOn()) \
             Tracer::traceCString(PEGASUS_FILE_LINE_COMMA comp, level, chars); \          { \
               if (Tracer::isTraceEnabled(comp, level)) \
               { \
                   Tracer::traceCString(PEGASUS_FILE_LINE_COMMA comp, chars); \
               } \
           } \
     } \     } \
     while (0)     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  // This class is constructed with the same arguments passed to PEG_TRACE().
 // number of arguments on each call.  The d construct allows this to be  // The constructor saves all the fixed arguments and calls va_start() on
 // treated as a single statement.  // the varying arguments (wherein the va_list argument is the ap member of
   // this class). The PEG_TRACE() macro eventually calls invoke() with the
   // file and line macros in order to write the trace entry. For more details,
   // see the comments below on the PEG_TRACE() macro.
   //
   class TraceCallFrame
   {
   public:
   
       const char* file;
       Uint32 line;
   
       TraceCallFrame(const char* file_, Uint32 line_) : file(file_), line(line_)
       {
       }
   
       PEGASUS_FORMAT(4, 5)
       inline void invoke(
           const TraceComponentId component,
           const Uint32 level,
           const char* format,
           ...)
       {
           if (Tracer::isTraceEnabled(component, level))
           {
               va_list ap;
               va_start(ap, format);
               Tracer::_trace(file, line, component, format, ap);
               va_end(ap);
           }
       }
   
       ~TraceCallFrame()
       {
       }
   };
   //
   // This macro is a wrapper for calling the printf-style form of the
   // Tracer::trace() function. Since macros cannot have a varying number of
   // arguments, PEG_TRACE() must be invoked with double parentheses. For
   // example:
   //
   //     PEG_TRACE((TRC_HTTP, Tracer::LEVEL1, "Oops: %d", 999));
   //
   // This macro offers two advantages over the calling trace() directly.
   //
   //     1. It eliminates the call to trace() if isTraceOn() returns false.
   //        This has proven to reduce the expense of servicing a request
   //        (when tracing is off) by as much as 3%.
   //
   //     2. It implicitly injects the __FILE__ and __LINE__ macros, relieving
   //        the caller of this burden.
   //
 # define PEG_TRACE(VAR_ARGS) \ # define PEG_TRACE(VAR_ARGS) \
     do \     do \
     { \     { \
         if (Tracer::isTraceOn()) \         if (Tracer::isTraceOn()) \
             Tracer::trace VAR_ARGS; \          { \
                   TraceCallFrame frame(__FILE__, __LINE__); \
                   frame.invoke VAR_ARGS; \
           } \
     } \     } \
     while (0)     while (0)
  


Legend:
Removed from v.1.27.4.1  
changed lines
  Added in v.1.54

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2