Belle II Software  light-2403-persian
LogMessage.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 #include <framework/logging/LogConfig.h>
12 #include <framework/logging/LogVariableStream.h>
13 
14 #include <string>
15 #include <iosfwd>
16 
17 
18 namespace Belle2 {
29  class LogMessage {
30  public:
31 
44  LogMessage(LogConfig::ELogLevel logLevel, const std::string& message, const char* package,
45  std::string function, std::string file, unsigned int line, int debugLevel = 0);
46 
58  LogMessage(LogConfig::ELogLevel logLevel, LogVariableStream&& messageStream, const char* package,
59  std::string function, std::string file, unsigned int line, int debugLevel = 0);
60 
64  LogMessage(LogMessage&&) = default;
65 
69  LogMessage(LogMessage const& lm) = default;
70 
76  bool operator==(const LogMessage& message) const;
77 
79  bool operator!=(const LogMessage& message) const { return !(*this == message); }
80 
84  LogMessage& operator=(const LogMessage& lvs) = default;
85 
92 
98  const std::string& getPackage() const {return m_package; }
99 
105  const std::string getMessage() const { return m_message.str(); }
106 
110  void setModule(const std::string& module) {m_module = module; }
111 
115  void setLogInfo(unsigned int logInfo) {m_logInfo = logInfo; }
116 
120  void setCount(int count) {m_count = count; }
121 
127  std::ostream& print(std::ostream& out) const;
128 
133  std::string toJSON(bool complete) const;
134 
136  const std::vector<LogVar>& getLogVariables() const { return m_message.getVariables(); }
137 
143  struct TextHasher {
145  std::size_t operator()(const LogMessage& msg) const
146  {
147  return msg.m_logLevel ^ std::hash<std::string>()(msg.m_message.getMessage());
148  }
150  bool operator()(const LogMessage& lhs, const LogMessage& rhs) const
151  {
152  return (lhs.m_logLevel == rhs.m_logLevel) &&
153  (lhs.m_message.getMessage() == rhs.m_message.getMessage());
154  }
155  };
156  private:
157 
160  std::string m_module;
161  std::string m_package;
162  std::string m_function;
163  std::string m_file;
164  unsigned int m_line;
167  unsigned int m_logInfo;
168  int m_count;
169  };
171 } // end namespace Belle2
172 
176 extern std::ostream& operator<< (std::ostream& out, const Belle2::LogMessage& logMessage);
ELogLevel
Definition of the supported log levels.
Definition: LogConfig.h:26
The LogMessage class.
Definition: LogMessage.h:29
LogMessage(LogConfig::ELogLevel logLevel, const std::string &message, const char *package, std::string function, std::string file, unsigned int line, int debugLevel=0)
The LogMessage constructor.
Definition: LogMessage.cc:25
std::string toJSON(bool complete) const
Return a json string for the log message.
Definition: LogMessage.cc:68
int m_debugLevel
The debug level for messages with level=c_Debug.
Definition: LogMessage.h:165
void setLogInfo(unsigned int logInfo)
Configure which information should be printed.
Definition: LogMessage.h:115
bool operator!=(const LogMessage &message) const
Check for inequality.
Definition: LogMessage.h:79
unsigned int m_logInfo
kind of information to show (ORed combination of LogConfig::ELogInfo flags).
Definition: LogMessage.h:167
LogVariableStream m_message
The message stream which should be sent.
Definition: LogMessage.h:159
const std::string getMessage() const
Returns the message text.
Definition: LogMessage.h:105
void setCount(int count)
Set the number of occurrences.
Definition: LogMessage.h:120
unsigned int m_line
The line number in the source code where the message was sent from.
Definition: LogMessage.h:164
std::string m_file
The file name where the message was sent from.
Definition: LogMessage.h:163
bool operator==(const LogMessage &message) const
Compares two messages.
Definition: LogMessage.cc:57
std::string m_module
The module name where the message was sent from.
Definition: LogMessage.h:160
LogConfig::ELogLevel getLogLevel() const
Returns the log level of the message.
Definition: LogMessage.h:91
LogMessage(LogMessage const &lm)=default
Provide copy-constructor.
std::ostream & print(std::ostream &out) const
Generate output stream.
Definition: LogMessage.cc:128
std::string m_function
The function name where the message was sent from.
Definition: LogMessage.h:162
const std::string & getPackage() const
Returns the package where the message was sent from.
Definition: LogMessage.h:98
LogConfig::ELogLevel m_logLevel
The log level of the message.
Definition: LogMessage.h:158
std::string m_package
The package name where the message was sent from.
Definition: LogMessage.h:161
void setModule(const std::string &module)
Configure which information should be printed.
Definition: LogMessage.h:110
int m_count
Number of occurrences of the same message.
Definition: LogMessage.h:168
LogMessage & operator=(const LogMessage &lvs)=default
Custom assignment-operator, thanks to stringsream's incompetence ...
LogMessage(LogMessage &&)=default
Provide move constructor.
const std::vector< LogVar > & getLogVariables() const
Return a reference to the log variables associated with this message.
Definition: LogMessage.h:136
std::ostream & operator<<(std::ostream &os, const BaseConstraint &bc)
Prints out a BaseConstraint, using its print method.
Specialized implementation of an ostream-like class where the << operator can be used to insert value...
std::string getMessage() const
Return the constant message part without the variables.
const std::vector< LogVar > & getVariables() const
Return the list of all defined variables.
std::string str(bool showVariables=true) const
Return the content of the stream as string.
Abstract base class for different kinds of events.
Definition: ClusterUtils.h:24
Helper struct to hash and compare messages only by log level and message content.
Definition: LogMessage.h:143
bool operator()(const LogMessage &lhs, const LogMessage &rhs) const
Check if log level and message text are identical.
Definition: LogMessage.h:150
std::size_t operator()(const LogMessage &msg) const
Return a hash for the given log message just based on the log level and the message.
Definition: LogMessage.h:145