ErrorLogger.h
Go to the documentation of this file.
1 #ifndef _utl_ErrorLogger_h_
2 #define _utl_ErrorLogger_h_
3 
4 #include <string>
5 #include <map>
6 #include <iostream>
7 #include <sstream>
8 
9 #ifndef __CINT__
10 # include <boost/format.hpp>
11 #endif
12 
13 #include <utl/Singleton.h>
14 #include <utl/Verbosity.h>
15 
16 
17 namespace utl {
18 
34  class ErrorLogger : public LeakingSingleton<ErrorLogger> {
35 
36  public:
38 
41  eDebug = -1,
43  eInfo = 0,
44  eWarning = 1,
45  eError = 2,
46  eFatal = 3,
48  };
49 
51  void Log(const ESeverityLevel severity,
52  const std::string& functionName,
53  const std::string& fileName,
54  const int lineNumber,
55  const std::string& message,
56  EVerbosity verbosity = Verbosity::eDefault,
57  bool stripBaseDir = true) const;
58 
60  void Log(const ESeverityLevel severity,
61  const std::string& functionName,
62  const std::string& fileName,
63  const int lineNumber,
64  const std::ostringstream& message,
65  const EVerbosity verbosity = Verbosity::eDefault,
66  bool stripBaseDir = true) const
67  { Log(severity, functionName, fileName, lineNumber, message.str(), verbosity, stripBaseDir); }
68 
69 #ifndef __CINT__
70  void Log(const ESeverityLevel severity,
72  const std::string& functionName,
73  const std::string& fileName,
74  const int lineNumber,
75  const boost::format& message,
76  const EVerbosity verbosity = Verbosity::eDefault,
77  bool stripBaseDir = true) const
78  { Log(severity, functionName, fileName, lineNumber, message.str(), verbosity, stripBaseDir); }
79 #endif
80 
82 
85  void SetStream(std::ostream& stream) { fOStream = &stream; SetColorOutput(false); }
86 
88  void SetVerbosity(const EVerbosity verbosity)
89  { if (verbosity != Verbosity::eDefault) fVerbosity = verbosity; }
90 
92  EVerbosity GetVerbosity() const { return fVerbosity; }
93 
95  void SetMinSeverity(const ESeverityLevel severity)
96  { fMinSeverity = severity; }
97 
100 
101  void SetColorOutput(const bool color) { fColorOutput = color; }
102  bool HasColor() const { return fColorOutput; }
103 
105  std::string GetSeverityName(const ESeverityLevel severity) const;
106 
107  private:
108  ErrorLogger();
109  ~ErrorLogger() = default;
110  ErrorLogger(const ErrorLogger& er);
111  ErrorLogger& operator=(const ErrorLogger& rhs);
112 
113  std::ostream* fOStream = nullptr;
115  unsigned int fBaseDirLength = 0;
116  bool fColorOutput = false;
118 
119  mutable std::map<std::string, int> fListOfErrorMessages;
120 
122 
123  };
124 
125 }
126 
127 
136 #define LOG_MESSAGE_(severity, message) \
137 utl::ErrorLogger::GetInstance().Log(severity, __func__, __FILE__, __LINE__, \
138  message)
139 
141 #define LOG_TERSE_MESSAGE_(severity, message) \
142 utl::ErrorLogger::GetInstance().Log(severity, __func__, __FILE__, __LINE__, \
143  message, utl::Verbosity::eFunction)
144 
154 #ifdef DEBUG
155 # define DEBUGLOG(message) LOG_MESSAGE_(utl::ErrorLogger::eDebug, message)
156 #else
157 # define DEBUGLOG(message)
158 #endif
159 
161 #define INFO(message) LOG_MESSAGE_(utl::ErrorLogger::eInfo, message)
162 #define WARNING(message) LOG_MESSAGE_(utl::ErrorLogger::eWarning, message)
164 #define ERROR(message) LOG_MESSAGE_(utl::ErrorLogger::eError, message)
166 #define FATAL(message) LOG_MESSAGE_(utl::ErrorLogger::eFatal, message)
168 
169 #define LOGG4COUT(message) utl::ErrorLogger::GetInstance().Log(utl::ErrorLogger::eInfo, \
170  "G4COut", "", 0, message, utl::Verbosity::eSeverity)
171 #define LOGG4CERR(message) utl::ErrorLogger::GetInstance().Log(utl::ErrorLogger::eError, \
172  "G4CErr", "", 0, message, utl::Verbosity::eSeverity)
173 
175 #define INFO_TERSE(message) LOG_TERSE_MESSAGE_(utl::ErrorLogger::eInfo, message)
176 #define WARNING_TERSE(message) LOG_TERSE_MESSAGE_(utl::ErrorLogger::eWarning, message)
178 #define ERROR_TERSE(message) LOG_TERSE_MESSAGE_(utl::ErrorLogger::eError, message)
180 #define FATAL_TERSE(message) LOG_TERSE_MESSAGE_(utl::ErrorLogger::eFatal, message)
182 
183 #endif
void Log(const ESeverityLevel severity, const std::string &functionName, const std::string &fileName, const int lineNumber, const std::string &message, EVerbosity verbosity=Verbosity::eDefault, bool stripBaseDir=true) const
General interface for logging a message.
Definition: ErrorLogger.cc:89
Class to handle routing and writing of error messages.
Definition: ErrorLogger.h:34
Include filename and line number.
Definition: Verbosity.h:16
ErrorLogger & operator=(const ErrorLogger &rhs)
void SetMinSeverity(const ESeverityLevel severity)
Set minimal severity for reporting.
Definition: ErrorLogger.h:95
ESeverityLevel GetMinSeverity() const
Get the minimal severity.
Definition: ErrorLogger.h:99
void SetColorOutput(const bool color)
Definition: ErrorLogger.h:101
General (informational) message.
Definition: ErrorLogger.h:43
~ErrorLogger()=default
void SetVerbosity(const EVerbosity verbosity)
Set the verbosity level.
Definition: ErrorLogger.h:88
Debugging message.
Definition: ErrorLogger.h:41
void SetStream(std::ostream &stream)
Definition: ErrorLogger.h:85
ESeverityLevel fMinSeverity
Definition: ErrorLogger.h:117
void WriteErrorMessagesToStream()
Definition: ErrorLogger.cc:130
std::map< std::string, int > fListOfErrorMessages
Definition: ErrorLogger.h:119
bool HasColor() const
Definition: ErrorLogger.h:102
CRTP for leaking singleton.
Definition: Singleton.h:124
Warning message.
Definition: ErrorLogger.h:44
unsigned int fBaseDirLength
Definition: ErrorLogger.h:115
std::ostream * fOStream
Current stream for logging messages.
Definition: ErrorLogger.h:113
EVerbosity fVerbosity
Definition: ErrorLogger.h:114
void Log(const ESeverityLevel severity, const std::string &functionName, const std::string &fileName, const int lineNumber, const std::ostringstream &message, const EVerbosity verbosity=Verbosity::eDefault, bool stripBaseDir=true) const
Dump message from ostringstream instead of of a string.
Definition: ErrorLogger.h:60
Verbosity::EVerbosity EVerbosity
Definition: ErrorLogger.h:37
ESeverityLevel
Message severity levels.
Definition: ErrorLogger.h:40
std::string GetSeverityName(const ESeverityLevel severity) const
Get string name for severity level.
Definition: ErrorLogger.cc:22
EVerbosity GetVerbosity() const
Get the verbosity level.
Definition: ErrorLogger.h:92
use default verbosity from error logger
Definition: Verbosity.h:11
Error message.
Definition: ErrorLogger.h:45
Fatal error message.
Definition: ErrorLogger.h:46

, generated on Tue Sep 26 2023.