Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:06:57

0001 /*
0002  * =====================================================================================
0003  *
0004  *       Filename:  CSCDQM_Logger.h
0005  *
0006  *    Description:  Histo Provider to EventProcessor
0007  *
0008  *        Version:  1.0
0009  *        Created:  10/03/2008 10:26:04 AM
0010  *       Revision:  none
0011  *       Compiler:  gcc
0012  *
0013  *         Author:  Valdas Rapsevicius, valdas.rapsevicius@cern.ch
0014  *        Company:  CERN, CH
0015  *
0016  * =====================================================================================
0017  */
0018 
0019 #ifndef CSCDQM_Logger_H
0020 #define CSCDQM_Logger_H
0021 
0022 #include <iostream>
0023 #include <iomanip>
0024 //#include <typeinfo> typeid(this).name()
0025 
0026 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0027 
0028 #ifdef DQMGLOBAL
0029 
0030 #define LOG_DEBUG ((!edm::MessageDrop::instance()->debugEnabled) ? cscdqm::LogDebugger(false) : cscdqm::LogDebugger())
0031 
0032 #endif
0033 
0034 #ifdef DQMLOCAL
0035 
0036 #define LOG_DEBUG cscdqm::LogDebugger()
0037 
0038 #endif
0039 
0040 #define LOG_ERROR cscdqm::LogError()
0041 #define LOG_WARN cscdqm::LogWarn()
0042 #define LOG_INFO cscdqm::LogInfo()
0043 #define LOG_COUT cscdqm::LogCout()
0044 
0045 namespace cscdqm {
0046 
0047   /**
0048    * @class Logger
0049    * @brief Base Logger Object (empty)
0050    */
0051   class Logger {};
0052 
0053   /**
0054    * @class LogInfo
0055    * @brief Information level logger. Use LOG_INFO macros instead, i.e.
0056    * LOG_INFO << "x = " << x;
0057    */
0058   class LogInfo : public edm::LogInfo, public Logger {
0059 #ifdef DQMGLOBAL
0060   public:
0061     LogInfo() : edm::LogInfo("") {}
0062 #else
0063   public:
0064     LogInfo() : edm::LogInfo() {}
0065 #endif
0066   };
0067 
0068   /**
0069    * @class LogWarn
0070    * @brief Warning level logger. Use LOG_WARN macros instead, i.e. LOG_WARN
0071    * << "x = " << x;
0072    */
0073   class LogWarn : public edm::LogWarning, public Logger {
0074 #ifdef DQMGLOBAL
0075   public:
0076     LogWarn() : edm::LogWarning("") {}
0077 #else
0078   public:
0079     LogWarn() : edm::LogWarning() {}
0080 #endif
0081   };
0082 
0083   /**
0084    * @class LogError
0085    * @brief Error level logger. Use LOG_ERROR macros instead, i.e. LOG_ERROR <<
0086    * "x = " << x;
0087    */
0088   class LogError : public edm::LogError, public Logger {
0089 #ifdef DQMGLOBAL
0090   public:
0091     LogError() : edm::LogError("") {}
0092 #else
0093   public:
0094     LogError() : edm::LogError() {}
0095 #endif
0096   };
0097 
0098 #ifdef DQMGLOBAL
0099 
0100   /**
0101    * @class LogDebugger
0102    * @brief Debug Level logger. Use LOG_DEBUG macros instead, i.e. LOG_DEBUG <<
0103    * "x = " << x;
0104    */
0105   class LogDebugger : public edm::LogDebug_, public Logger {
0106   public:
0107     LogDebugger() : edm::LogDebug_("", __FILE__, __LINE__) {}
0108     LogDebugger(const bool empty) : edm::LogDebug_() {}
0109   };
0110 
0111 #endif
0112 
0113 #ifdef DQMLOCAL
0114 
0115   /**
0116    * @class LogDebugger
0117    * @brief Debug Level logger. Use LOG_DEBUG macros instead, i.e. LOG_DEBUG <<
0118    * "x = " << x;
0119    */
0120   class LogDebugger : public edm::LogDebug, public Logger {
0121   public:
0122     LogDebugger() : edm::LogDebug() {}
0123   };
0124 
0125 #endif
0126 
0127   /**
0128    * @class LogCout
0129    * @brief Simple logger that prints stuff to std::cout. Use LOG_COUT macros
0130    * instead, i.e. LOG_COUT << "x = " << x;
0131    */
0132   class LogCout : public Logger {
0133   public:
0134     LogCout() {}
0135     ~LogCout() { std::cout << std::endl; }
0136 
0137     template <class T>
0138     LogCout& operator<<(T const& t) {
0139       std::cout << t;
0140       return *this;
0141     }
0142 
0143     LogCout& operator<<(std::ostream& (*f)(std::ostream&)) {
0144       std::cout << f;
0145       return *this;
0146     }
0147 
0148     LogCout& operator<<(std::ios_base& (*f)(std::ios_base&)) {
0149       std::cout << f;
0150       return *this;
0151     }
0152   };
0153 
0154 }  // namespace cscdqm
0155 
0156 #endif