12 if(_mainLoopThread.joinable()) {
15 _mainLoopThread.interrupt();
22 _messageQueue.push_exception(std::make_exception_ptr(boost::thread_interrupted()));
23 }
while(!_mainLoopThread.try_join_for(boost::chrono::milliseconds(10)));
25 catch(boost::thread_interrupted&) {
29 catch(std::system_error& e) {
30 std::cerr <<
"std::system_error caught: " << e.what() << std::endl;
34 std::cerr <<
"unknown exception caught." << std::endl;
38 assert(!_mainLoopThread.joinable());
44 return {
this, severity, std::move(context)};
50 : std::ostream(severity >=
logger->_minSeverity ? &_buf : nullptr), _severity(severity), _context(std::move(context)),
57 _logger.log(_severity, std::move(_context), _buf.str());
62 void Logger::log(
Logger::Severity severity, std::string context, std::string message)
noexcept {
64 _messageQueue.push({severity, std::move(context), std::move(message)});
66 catch(std::system_error& e) {
67 std::cerr <<
"std::system_error caught: " << e.what() << std::endl;
74 std::string Logger::severityToString(
Severity severity) {
92 void Logger::mainLoop() {
95 _messageQueue.pop_wait(message);
97 auto* stream = &std::cout;
104 auto t = std::time(
nullptr);
105 auto tm = *std::localtime(&t);
106 std::stringstream prefix;
107 prefix.setf(std::ios::left, std::ios::adjustfield);
108 prefix << std::put_time(&tm,
"%Y-%m-%dT%H:%M:%S") <<
" " << std::setw(20) << message.context.substr(0, 20) <<
" ["
109 << severityToString(message.severity) <<
"] ";
112 std::stringstream ss(message.text);
114 while(std::getline(ss, line,
'\n')) {
115 *stream << prefix.str() << line <<
"\n";
117 *stream << std::flush;
Proxy for output stream, handed out to the log sources by the Logger::Module.
StreamProxy(Logger *logger, Severity severity, std::string context)
Severity
Severity levels used by the Logger.
StreamProxy getStream(Severity severity, std::string context)
Return an output stream object for the given severity.
InvalidityTracer application module.
Logger::StreamProxy logger(Logger::Severity severity, std::string context)
Convenience function to obtain the logger stream.