Miind
Log.hpp
Go to the documentation of this file.
1 // Copyright (c) 2005 - 2012 Marc de Kamps
2 // 2012 David-Matthias Sichau
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6 //
7 // * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation
9 // and/or other materials provided with the distribution.
10 // * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software
11 // without specific prior written permission.
12 //
13 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
15 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
16 // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
18 //
19 
20 #ifndef MPILIB_UTILITIES_LOG_HPP_
21 #define MPILIB_UTILITIES_LOG_HPP_
22 
23 #include <iostream>
24 #include <memory>
25 #include <time.h>
26 #include <string>
27 #include <sstream>
28 
29 namespace MPILib {
30 namespace utilities {
31 
127 enum LogLevel {
136 };
137 
141 class Log {
142 public:
146  Log()=default;
150  Log(const Log&)=delete;
154  Log& operator =(const Log&)=delete;
158  virtual ~Log();
159 
165  std::ostringstream& writeReport(LogLevel level = logINFO);
166 
171  static std::shared_ptr<std::ostream> getStream();
172 
177  static void setStream(std::shared_ptr<std::ostream> pStream);
178 
183  static LogLevel getReportingLevel();
184 
189  static void setReportingLevel(LogLevel level);
190 
191 private:
192 
193 
198  static void writeOutput(const std::string& msg);
199 
205 
209  static std::shared_ptr<std::ostream> _pStream;
213  std::ostringstream _buffer;
214 };
215 
216 } /* namespace utilities */
217 
225 #define LOG(level) \
226  if (level > MPILib::utilities::Log::getReportingLevel() || ! MPILib::utilities::Log::getStream()) ; \
227  else MPILib::utilities::Log().writeReport(level)
228 
229 } /* namespace MPILib */
230 #endif /* MPILIB_UTILITIES_LOG_HPP_ */
static std::shared_ptr< std::ostream > _pStream
Definition: Log.hpp:209
static void setReportingLevel(LogLevel level)
Definition: Log.cpp:117
class for logging reports. The usage of this log class is described on page The Log utilities provide...
Definition: Log.hpp:141
static LogLevel getReportingLevel()
Definition: Log.cpp:124
std::ostringstream _buffer
Definition: Log.hpp:213
static LogLevel _reportingLevel
Definition: Log.hpp:204
virtual ~Log()
Definition: Log.cpp:128
static void writeOutput(const std::string &msg)
Definition: Log.cpp:91
static void setStream(std::shared_ptr< std::ostream > pStream)
Definition: Log.cpp:87
Log & operator=(const Log &)=delete
static std::shared_ptr< std::ostream > getStream()
Definition: Log.cpp:83
std::ostringstream & writeReport(LogLevel level=logINFO)
Definition: Log.cpp:100