Listing 1
// SimpleErrorLogger.h, cpp
//----------------------------------------------------------
class ErrorLogger
{
public:
typedef boost::shared_ptr<ErrorLogger> ErrorLoggerPtr;
virtual ~ErrorLogger();
static ErrorLoggerPtr Instance();
virtual void Error( const string& msg );
virtual void Log( const string& msg );
static void PushLogger( ErrorLoggerPtr );
static void PopLogger();
protected:
ErrorLogger() {}
private:
static stack<ErrorLoggerPtr> loggers_;
};
//----------------------------------------------------------
// SimpleErrorLogger.cpp
stack<ErrorLoggerPtr> ErrorLogger::loggers_;
//----------------------------------------------------------
ErrorLogger::~ErrorLogger()
{
}
//----------------------------------------------------------
ErrorLoggerPtr ErrorLogger::Instance( )
{
if( loggers_.empty() )
PushLogger(ErrorLoggerPtr(new ErrorLogger));
return loggers_.top();
}
//----------------------------------------------------------
void ErrorLogger::Error( const string& msg )
{
cerr << msg;
}
//----------------------------------------------------------
void ErrorLogger::Log( const string& msg )
{
cout << msg;
}
//----------------------------------------------------------
void ErrorLogger:: PushLogger( ErrorLoggerPtr pLogger )
{
loggers_.push(pLogger);
}
//----------------------------------------------------------
void ErrorLogger:: PopLogger()
{
if( !loggers_.empty() )
loggers_.pop();
}