MachineIntelligenceCore:Toolchain
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Logger.cpp
Go to the documentation of this file.
1 
23 #include <logger/Logger.hpp>
24 
25 #include <boost/foreach.hpp>
26 
27 namespace mic {
28 namespace logger {
29 
30 // Init application instance - as NULL.
31 boost::atomic<Logger*> Logger::instance_(NULL);
32 
33 // Initilize mutex.
34 boost::mutex Logger::instantiation_mutex;
35 
36 
38  // Try to load the instance - first check.
39  Logger* tmp = instance_.load(boost::memory_order_consume);
40  // If instance does not exist.
41  if (!tmp) {
42  // Enter critical section.
43  boost::mutex::scoped_lock guard(instantiation_mutex);
44  // Try to load the instance - second check.
45  tmp = instance_.load(boost::memory_order_consume);
46  // If still does not exist - create new instance.
47  if (!tmp) {
48  tmp = new Logger;
49  instance_.store(tmp, boost::memory_order_release);
50  }//: if
51  // Exit critical section.
52  }//: if
53  // Return instance.
54  return tmp;
55 }
56 
57 
59 }
60 
61 
63  outputs.push_back(out);
64 }
65 
66 
67 void Logger::log(const std::string & file, int line, Severity_t sev, const std::string & msg) {
68  BOOST_FOREACH(LoggerOutput & output, outputs) {
69  if (sev < output.getLvl())
70  continue;
71 
72  output.print(msg, sev, file, line);
73  }
74 }
75 
76 
77 
79  BOOST_FOREACH(LoggerOutput & output, outputs)
80  output.incrementLvl();
81 }
82 
84  BOOST_FOREACH(LoggerOutput & output, outputs)
85  output.decrementLvl();
86 }
87 
88 
90  BOOST_FOREACH(LoggerOutput & output, outputs)
91  output.setLvl(sev);
92 }
93 
94 
95 } /* namespace logger */
96 } /* namespace mic */
97 
Logger - defined in the form of a singleton, with double-checked locking pattern (DCLP) based access ...
Definition: Logger.hpp:47
Severity_t
Message severity level.
Definition: LoggerAux.hpp:35
static boost::atomic< Logger * > instance_
Definition: Logger.hpp:86
void setSeverityLevel(Severity_t sev)
Definition: Logger.cpp:89
void log(const std::string &file, int line, Severity_t sev, const std::string &msg)
Definition: Logger.cpp:67
Contains declaration of a logger, a singleton responsible for logging and displaying all kinds of mes...
Severity_t getLvl() const
void incrementSeverityLevel()
Definition: Logger.cpp:78
void setLvl(Severity_t sev)
Abstract interface for different logger outputs.
static Logger * getInstance()
Definition: Logger.cpp:37
void addOutput(LoggerOutput *out)
Definition: Logger.cpp:62
boost::ptr_vector< LoggerOutput > outputs
Definition: Logger.hpp:101
void decrementSeverityLevel()
Definition: Logger.cpp:83
virtual void print(const std::string &msg_, Severity_t severity_, const std::string &file_, int line_) const =0
Logs given message. Depending on actual implementation, it can be printed on terminal, ncurses window, file etc.
static boost::mutex instantiation_mutex
Definition: Logger.hpp:91