From 5075dc260b6b28da40c97a5aaef8dd7f3e52bbe8 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Thu, 29 Jul 2010 09:22:49 +0000 Subject: [PATCH] Logging, difference type of logging git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2604 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/base/src/log.hh | 24 +++++++------- modules/base/src/log_sink.cc | 6 ++-- modules/base/src/log_sink.hh | 10 +++--- modules/gui/src/info_widget/log_reader.cc | 39 +++++++++++++++++++++-- modules/gui/src/info_widget/log_reader.hh | 8 +++-- 5 files changed, 63 insertions(+), 24 deletions(-) diff --git a/modules/base/src/log.hh b/modules/base/src/log.hh index b3326d411..edaee14d1 100644 --- a/modules/base/src/log.hh +++ b/modules/base/src/log.hh @@ -70,17 +70,17 @@ private: #define PUSH_VERBOSITY(n) ::ost::Logger::Instance().PushVerbosityLevel(n) #define POP_VERBOSITY(n) ::ost::Logger::Instance().PopVerbosityLevel() -#define LOG_ERROR(m) ::ost::Logger::Instance()(::ost::Logger::QUIET) << m; -#define LOGN_ERROR(m) ::ost::Logger::Instance()(::ost::Logger::QUIET) << m << std::endl; +#define LOG_ERROR(m) if(true){std::stringstream tmp_stream__;tmp_stream__ << m ;::ost::Logger::Instance()(::ost::Logger::QUIET)->LogMessage(tmp_stream__.str());} +#define LOGN_ERROR(m) if(true){std::stringstream tmp_stream__;tmp_stream__ << m << std::endl;::ost::Logger::Instance()(::ost::Logger::QUIET)->LogMessage(tmp_stream__.str());} -#define LOG_MESSAGE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::NORMAL) {(::ost::Logger::Instance()(::ost::Logger::NORMAL)) << m ;} -#define LOGN_MESSAGE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::NORMAL) {(::ost::Logger::Instance()(::ost::Logger::NORMAL)) << m << std::endl;} +#define LOG_MESSAGE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::NORMAL) {std::stringstream tmp_stream__;tmp_stream__ << m ;::ost::Logger::Instance()(::ost::Logger::NORMAL)->LogMessage(tmp_stream__.str(),::ost::Logger::NORMAL);} +#define LOGN_MESSAGE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::NORMAL) {std::stringstream tmp_stream__; tmp_stream__ << m <<std::endl;::ost::Logger::Instance()(::ost::Logger::NORMAL)->LogMessage(tmp_stream__.str(),::ost::Logger::NORMAL);} -#define LOG_VERBOSE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::VERBOSE) {(::ost::Logger::Instance()(::ost::Logger::VERBOSE)) << m ;} -#define LOGN_VERBOSE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::VERBOSE) {(::ost::Logger::Instance()(::ost::Logger::VERBOSE)) << m << std::endl;} +#define LOG_VERBOSE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::VERBOSE) {std::stringstream tmp_stream__;tmp_stream__ << m ;::ost::Logger::Instance()(::ost::Logger::VERBOSE)->LogMessage(tmp_stream__.str(),::ost::Logger::VERBOSE);} +#define LOGN_VERBOSE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::VERBOSE) {std::stringstream tmp_stream__; tmp_stream__ << m <<std::endl;::ost::Logger::Instance()(::ost::Logger::VERBOSE)->LogMessage(tmp_stream__.str(),::ost::Logger::VERBOSE);} -#define LOG_DEBUG(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DEBUG) {(::ost::Logger::Instance()(::ost::Logger::DEBUG)) << m ;} -#define LOGN_DEBUG(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DEBUG) {(::ost::Logger::Instance()(::ost::Logger::DEBUG)) << m << std::endl;} +#define LOG_DEBUG(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DEBUG) {std::stringstream tmp_stream__;tmp_stream__ << m ;::ost::Logger::Instance()(::ost::Logger::DEBUG)->LogMessage(tmp_stream__.str(),::ost::Logger::DEBUG);} +#define LOGN_DEBUG(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DEBUG) {std::stringstream tmp_stream__; tmp_stream__ << m <<std::endl;::ost::Logger::Instance()(::ost::Logger::DEBUG)->LogMessage(tmp_stream__.str(),::ost::Logger::DEBUG);} #ifdef NDEBUG @@ -92,11 +92,11 @@ private: #else -# define LOG_DUMP(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DUMP) {(::ost::Logger::Instance()(::ost::Logger::DUMP)) << m ;} -# define LOGN_DUMP(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DUMP) {(::ost::Logger::Instance()(::ost::Logger::DUMP)) << m << std::endl;} +# define LOG_DUMP(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DUMP) {std::stringstream tmp_stream__;tmp_stream__ << m ;::ost::Logger::Instance()(::ost::Logger::DUMP)->LogMessage(tmp_stream__.str(),::ost::Logger::DUMP);} +# define LOGN_DUMP(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::DUMP) {std::stringstream tmp_stream__; tmp_stream__ << m <<std::endl;::ost::Logger::Instance()(::ost::Logger::DUMP)->LogMessage(tmp_stream__.str(),::ost::Logger::DUMP);} -# define LOG_TRACE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::TRACE) {(::ost::Logger::Instance()(::ost::Logger::TRACE)) << m ;} -# define LOGN_TRACE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::TRACE) {(::ost::Logger::Instance()(::ost::Logger::TRACE)) << m << std::endl;} +# define LOG_TRACE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::TRACE) {std::stringstream tmp_stream__;tmp_stream__ << m ;::ost::Logger::Instance()(::ost::Logger::TRACE)->LogMessage(tmp_stream__.str(),::ost::Logger::TRACE);} +# define LOGN_TRACE(m) if(::ost::Logger::Instance().GetLogLevel()>=::ost::Logger::TRACE) {std::stringstream tmp_stream__; tmp_stream__ << m <<std::endl;::ost::Logger::Instance()(::ost::Logger::TRACE)->LogMessage(tmp_stream__.str(),::ost::Logger::TRACE);} #endif diff --git a/modules/base/src/log_sink.cc b/modules/base/src/log_sink.cc index c798ed018..eef34318b 100644 --- a/modules/base/src/log_sink.cc +++ b/modules/base/src/log_sink.cc @@ -16,6 +16,7 @@ // along with this library; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA //------------------------------------------------------------------------------ +#include <ost/log.hh> #include <ost/log_sink.hh> #include <iostream> namespace ost { @@ -30,6 +31,7 @@ bool ObservableLogSink::AddObserver(LogObserverPtr& observer){ } return false; } + bool ObservableLogSink::RemoveObserver(LogObserverPtr& observer){ std::vector<LogObserverPtr>::iterator found = std::find( this->observers_.begin(), this->observers_.end(), observer); if( found != this->observers_.end() ){ @@ -39,11 +41,11 @@ bool ObservableLogSink::RemoveObserver(LogObserverPtr& observer){ return false; } -void ObservableLogSink::LogMessage(const String& message){ +void ObservableLogSink::LogMessage(const String& message, int severity){ std::vector<LogObserverPtr>::const_iterator observers_it = this->observers_.begin() ; while( observers_it != this->observers_.end() ) { - ( *observers_it )->LogMessage(message) ; + ( *observers_it )->LogMessage(message, severity); observers_it++; } } diff --git a/modules/base/src/log_sink.hh b/modules/base/src/log_sink.hh index 8712e0f41..8819668f9 100644 --- a/modules/base/src/log_sink.hh +++ b/modules/base/src/log_sink.hh @@ -42,7 +42,7 @@ namespace { class DLLEXPORT_OST_BASE LogSink { public: - virtual void LogMessage(const String& message)=0; + virtual void LogMessage(const String& message, int severity = 0)=0; }; typedef boost::shared_ptr<LogSink> LogSinkPtr; @@ -50,7 +50,7 @@ typedef boost::shared_ptr<LogSink> LogSinkPtr; class DLLEXPORT_OST_BASE NullLogSink : public LogSink { public: NullLogSink():null_(new DevNull()){} - virtual void LogMessage(const String& message){null_ << message;} + virtual void LogMessage(const String& message, int severity){null_ << message;} private: std::ostream null_; @@ -60,7 +60,7 @@ private: class DLLEXPORT_OST_BASE StdLogSink : public LogSink { public: StdLogSink(std::ostream& stream):stream_(stream){} - virtual void LogMessage(const String& message){ + virtual void LogMessage(const String& message, int severity){ stream_ << message; } @@ -70,7 +70,7 @@ private: class DLLEXPORT_OST_BASE LogObserver { public: - virtual void LogMessage(const String& message)=0; + virtual void LogMessage(const String& message, int severity)=0; }; typedef boost::shared_ptr<LogObserver> LogObserverPtr; @@ -79,7 +79,7 @@ public: ObservableLogSink(); bool AddObserver(LogObserverPtr& observer); bool RemoveObserver(LogObserverPtr& observer); - void LogMessage(const String& message); + void LogMessage(const String& message, int severity); private: std::vector<LogObserverPtr> observers_; }; diff --git a/modules/gui/src/info_widget/log_reader.cc b/modules/gui/src/info_widget/log_reader.cc index f98411f3e..d93284b3e 100644 --- a/modules/gui/src/info_widget/log_reader.cc +++ b/modules/gui/src/info_widget/log_reader.cc @@ -36,15 +36,48 @@ LogReader::LogReader(QObject* parent) : olsp->AddObserver(losp); } -void LogReader::LogMessage(const String& message){ +void LogReader::LogMessage(const String& message, int severity){ if(this->parent()){ if(InfoWidget* info_widget = qobject_cast<InfoWidget*>(this->parent())){ - info_widget->LogMessage(message.c_str()); + QString q_message(message.c_str()); + if(q_message.endsWith("\n")){ + q_message.remove(q_message.size()-1,q_message.size()-1); + if(!log_cache_.contains(severity)){ + info_widget->LogMessage(q_message,GetIconForSeverity(severity)); + } + else{ + info_widget->LogMessage(log_cache_[severity]+q_message,GetIconForSeverity(severity)); + log_cache_.remove(severity); + } + } + else{ + if(!log_cache_.contains(severity)){ + log_cache_[severity] = message.c_str(); + } + else{ + log_cache_[severity].append(message.c_str()); + } + } } } } -LogReader::~LogReader() {} +QMessageBox::Icon LogReader::GetIconForSeverity(int severity){ + switch (severity) { + case 1: + return QMessageBox::Warning; + case 0: + return QMessageBox::Critical; + default : + return QMessageBox::Information; + } +} + +LogReader::~LogReader() { + ost::Logger& logger = ost::Logger::Instance(); + LogSinkPtr olsp = LogSinkPtr(new StdLogSink(std::cerr)); + logger.SetSink(olsp); +} } } // ns diff --git a/modules/gui/src/info_widget/log_reader.hh b/modules/gui/src/info_widget/log_reader.hh index 87a85b49b..4a2cc972b 100644 --- a/modules/gui/src/info_widget/log_reader.hh +++ b/modules/gui/src/info_widget/log_reader.hh @@ -20,6 +20,8 @@ #define OST_GUI_INFO_WIDGET_LOG_READER_HH #include <QObject> +#include <QMap> +#include <QMessageBox> #include <ost/log_sink.hh> @@ -38,9 +40,11 @@ public: LogReader(QObject* parent=NULL); ~LogReader(); -public: - void LogMessage(const String& message); + void LogMessage(const String& message, int severity); +private: + QMap<int, QString> log_cache_; + QMessageBox::Icon GetIconForSeverity(int severity); }; }} // ns -- GitLab