Skip to content
Snippets Groups Projects
Commit 11620c95 authored by stefan's avatar stefan
Browse files

Python Exports for new logging stuff

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2605 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 5075dc26
No related branches found
No related tags found
No related merge requests found
...@@ -20,11 +20,23 @@ ...@@ -20,11 +20,23 @@
using namespace boost::python; using namespace boost::python;
#include <ost/log.hh> #include <ost/log.hh>
#include <ost/log_sink.hh>
#include <ost/dyn_cast.hh>
using namespace ost; using namespace ost;
namespace { namespace {
struct WrappedLogSink : public LogSink, wrapper<LogSink>
{
virtual void LogMessage(const String& message , int severity) {
call<void>(this->get_override("LogMessage").ptr(),message,severity);
}
};
typedef boost::shared_ptr<WrappedLogSink> WrappedLogSinkPtr;
void push_verb(int n) void push_verb(int n)
{ {
if(n<0){ if(n<0){
...@@ -44,11 +56,81 @@ void pop_verb_file() ...@@ -44,11 +56,81 @@ void pop_verb_file()
Logger::Instance().PopFile(); Logger::Instance().PopFile();
} }
void pop_log_sink()
{
Logger::Instance().PopSink();
}
void push_verb_file(const String& filename) void push_verb_file(const String& filename)
{ {
Logger::Instance().PushFile(filename); Logger::Instance().PushFile(filename);
} }
void push_log_sink_1(LogSinkPtr& sink)
{
Logger::Instance().PushSink(sink);
}
void push_log_sink_2(WrappedLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
Logger::Instance().PushSink(lsp);
}
void push_log_sink_3(ObservableLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
Logger::Instance().PushSink(lsp);
}
void push_log_sink_4(FileLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
Logger::Instance().PushSink(lsp);
}
void push_log_sink_5(NullLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
Logger::Instance().PushSink(lsp);
}
void add_observer_1(ObservableLogSinkPtr& obs_sink, WrappedLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
obs_sink->AddObserver(lsp);
}
void add_observer_2(ObservableLogSinkPtr& obs_sink, FileLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
obs_sink->AddObserver(lsp);
}
void add_observer_3(ObservableLogSinkPtr& obs_sink, NullLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
obs_sink->AddObserver(lsp);
}
void remove_observer_1(ObservableLogSinkPtr& obs_sink, WrappedLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
obs_sink->RemoveObserver(lsp);
}
void remove_observer_2(ObservableLogSinkPtr& obs_sink, FileLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
obs_sink->RemoveObserver(lsp);
}
void remove_observer_3(ObservableLogSinkPtr& obs_sink, NullLogSinkPtr& sink)
{
LogSinkPtr lsp = dyn_cast<LogSink>(sink);
obs_sink->RemoveObserver(lsp);
}
void log_error(const String& m) {LOGN_ERROR(m);} void log_error(const String& m) {LOGN_ERROR(m);}
void log_message(const String& m) {LOGN_MESSAGE(m);} void log_message(const String& m) {LOGN_MESSAGE(m);}
void log_verbose(const String& m) {LOGN_VERBOSE(m);} void log_verbose(const String& m) {LOGN_VERBOSE(m);}
...@@ -58,12 +140,40 @@ void log_debug(const String& m) {LOGN_DEBUG(m);} ...@@ -58,12 +140,40 @@ void log_debug(const String& m) {LOGN_DEBUG(m);}
void export_Logger() void export_Logger()
{ {
class_<WrappedLogSink, WrappedLogSinkPtr, LogSink, boost::noncopyable>("LogSink",init<>())
.def("LogMessage",pure_virtual(&WrappedLogSink::LogMessage))
;
class_<ObservableLogSink, ObservableLogSinkPtr, bases<LogSink>, boost::noncopyable >("ObservableLogSink", init<>())
.def("LogMessage",&ObservableLogSink::LogMessage)
.def("AddObserver",&ObservableLogSink::AddObserver)
.def("AddObserver",add_observer_1)
.def("AddObserver",add_observer_2)
.def("AddObserver",add_observer_3)
.def("RemoveObserver",&ObservableLogSink::RemoveObserver)
.def("RemoveObserver",remove_observer_1)
.def("RemoveObserver",remove_observer_2)
.def("RemoveObserver",remove_observer_3)
;
class_<FileLogSink, FileLogSinkPtr, bases<LogSink>, boost::noncopyable >("FileLogSink", init<const String&>())
.def("LogMessage",&FileLogSink::LogMessage)
;
class_<NullLogSink, NullLogSinkPtr, bases<LogSink>, boost::noncopyable >("NullLogSink", init<>())
.def("LogMessage",&NullLogSink::LogMessage)
;
def("PushVerbosityLevel",push_verb); def("PushVerbosityLevel",push_verb);
def("PopVerbosityLevel",pop_verb); def("PopVerbosityLevel",pop_verb);
def("PushVerbosityFile",push_verb_file); def("PushVerbosityFile",push_verb_file);
def("PopVerbosityFile",pop_verb_file); def("PopVerbosityFile",pop_verb_file);
def("PushLogSink",push_log_sink_1);
def("PushLogSink",push_log_sink_2);
def("PushLogSink",push_log_sink_3);
def("PushLogSink",push_log_sink_4);
def("PushLogSink",push_log_sink_5);
def("PopLogSink",pop_log_sink);
def("LogError",log_error); def("LogError",log_error);
def("LogMessage",log_message); def("LogMessage",log_message);
def("LogVerbose",log_verbose); def("LogVerbose",log_verbose);
......
...@@ -23,7 +23,7 @@ namespace ost { ...@@ -23,7 +23,7 @@ namespace ost {
ObservableLogSink::ObservableLogSink(){} ObservableLogSink::ObservableLogSink(){}
bool ObservableLogSink::AddObserver(LogObserverPtr& observer){ bool ObservableLogSink::AddObserver(LogSinkPtr& observer){
if((std::find( this->observers_.begin(), this->observers_.end(), observer )) == this->observers_.end()) if((std::find( this->observers_.begin(), this->observers_.end(), observer )) == this->observers_.end())
{ {
this->observers_.push_back( observer ); this->observers_.push_back( observer );
...@@ -32,8 +32,8 @@ bool ObservableLogSink::AddObserver(LogObserverPtr& observer){ ...@@ -32,8 +32,8 @@ bool ObservableLogSink::AddObserver(LogObserverPtr& observer){
return false; return false;
} }
bool ObservableLogSink::RemoveObserver(LogObserverPtr& observer){ bool ObservableLogSink::RemoveObserver(LogSinkPtr& observer){
std::vector<LogObserverPtr>::iterator found = std::find( this->observers_.begin(), this->observers_.end(), observer); std::vector<LogSinkPtr>::iterator found = std::find( this->observers_.begin(), this->observers_.end(), observer);
if( found != this->observers_.end() ){ if( found != this->observers_.end() ){
this->observers_.erase(found); this->observers_.erase(found);
return true; return true;
...@@ -42,7 +42,7 @@ bool ObservableLogSink::RemoveObserver(LogObserverPtr& observer){ ...@@ -42,7 +42,7 @@ bool ObservableLogSink::RemoveObserver(LogObserverPtr& observer){
} }
void ObservableLogSink::LogMessage(const String& message, int severity){ void ObservableLogSink::LogMessage(const String& message, int severity){
std::vector<LogObserverPtr>::const_iterator observers_it = this->observers_.begin() ; std::vector<LogSinkPtr>::const_iterator observers_it = this->observers_.begin() ;
while( observers_it != this->observers_.end() ) while( observers_it != this->observers_.end() )
{ {
( *observers_it )->LogMessage(message, severity); ( *observers_it )->LogMessage(message, severity);
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <ostream> #include <ostream>
#include <iostream> #include <iostream>
#include <fstream>
#include <stack> #include <stack>
#include <vector> #include <vector>
...@@ -42,6 +43,7 @@ namespace { ...@@ -42,6 +43,7 @@ namespace {
class DLLEXPORT_OST_BASE LogSink { class DLLEXPORT_OST_BASE LogSink {
public: public:
LogSink(){};
virtual void LogMessage(const String& message, int severity = 0)=0; virtual void LogMessage(const String& message, int severity = 0)=0;
}; };
...@@ -56,6 +58,7 @@ private: ...@@ -56,6 +58,7 @@ private:
std::ostream null_; std::ostream null_;
}; };
typedef boost::shared_ptr<NullLogSink> NullLogSinkPtr;
class DLLEXPORT_OST_BASE StdLogSink : public LogSink { class DLLEXPORT_OST_BASE StdLogSink : public LogSink {
public: public:
...@@ -68,20 +71,34 @@ private: ...@@ -68,20 +71,34 @@ private:
std::ostream& stream_; std::ostream& stream_;
}; };
class DLLEXPORT_OST_BASE LogObserver { class DLLEXPORT_OST_BASE FileLogSink : public LogSink {
public: public:
virtual void LogMessage(const String& message, int severity)=0; FileLogSink(const String& file_name):stream_(file_name.c_str(), std::ios::out){}
virtual void LogMessage(const String& message, int severity){
if (stream_.is_open()){
stream_ << message;
stream_.flush();
}
}
~FileLogSink(){
stream_.close();
}
private:
std::ofstream stream_;
}; };
typedef boost::shared_ptr<LogObserver> LogObserverPtr;
typedef boost::shared_ptr<FileLogSink> FileLogSinkPtr;
class DLLEXPORT_OST_BASE ObservableLogSink : public LogSink { class DLLEXPORT_OST_BASE ObservableLogSink : public LogSink {
public: public:
ObservableLogSink(); ObservableLogSink();
bool AddObserver(LogObserverPtr& observer); bool AddObserver(LogSinkPtr& observer);
bool RemoveObserver(LogObserverPtr& observer); bool RemoveObserver(LogSinkPtr& observer);
void LogMessage(const String& message, int severity); void LogMessage(const String& message, int severity);
private: private:
std::vector<LogObserverPtr> observers_; std::vector<LogSinkPtr> observers_;
}; };
typedef boost::shared_ptr<ObservableLogSink> ObservableLogSinkPtr; typedef boost::shared_ptr<ObservableLogSink> ObservableLogSinkPtr;
......
...@@ -29,11 +29,8 @@ namespace ost { namespace gui { ...@@ -29,11 +29,8 @@ namespace ost { namespace gui {
LogReader::LogReader(QObject* parent) : LogReader::LogReader(QObject* parent) :
QObject(parent) { QObject(parent) {
ost::Logger& logger = ost::Logger::Instance(); ost::Logger& logger = ost::Logger::Instance();
ObservableLogSinkPtr olsp = ObservableLogSinkPtr(new ObservableLogSink()); LogSinkPtr lsp = LogSinkPtr(this);
LogSinkPtr lsp = LogSinkPtr(olsp); logger.PushSink(lsp);
logger.SetSink(lsp);
LogObserverPtr losp = LogObserverPtr(this);
olsp->AddObserver(losp);
} }
void LogReader::LogMessage(const String& message, int severity){ void LogReader::LogMessage(const String& message, int severity){
...@@ -75,8 +72,7 @@ QMessageBox::Icon LogReader::GetIconForSeverity(int severity){ ...@@ -75,8 +72,7 @@ QMessageBox::Icon LogReader::GetIconForSeverity(int severity){
LogReader::~LogReader() { LogReader::~LogReader() {
ost::Logger& logger = ost::Logger::Instance(); ost::Logger& logger = ost::Logger::Instance();
LogSinkPtr olsp = LogSinkPtr(new StdLogSink(std::cerr)); logger.PopSink();
logger.SetSink(olsp);
} }
} }
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
namespace ost { namespace gui { namespace ost { namespace gui {
class DLLEXPORT_OST_GUI LogReader: public QObject, public LogObserver class DLLEXPORT_OST_GUI LogReader: public QObject, public LogSink
{ {
Q_OBJECT; Q_OBJECT;
public: public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment