cpp_photon/include/LogSink.hpp

163 lines
3.6 KiB
C++
Raw Normal View History

//This file is part of Photon (http://photon.sourceforge.net)
//Copyright (C) 2004-2005 James Turk
//
// Author:
// James Turk (jpt2433@rit.edu)
//
// Version:
2005-02-16 06:58:05 +00:00
// $Id: LogSink.hpp,v 1.2 2005/02/16 06:58:05 cozman Exp $
2005-02-13 22:12:02 +00:00
#ifndef PHOTON_LOGSINK_HPP
#define PHOTON_LOGSINK_HPP
#include <string>
#include <fstream>
2005-02-13 22:12:02 +00:00
#include "types.hpp"
namespace photon
{
2005-01-27 05:24:11 +00:00
// Title: Logging Utilities
// Enum: LogLevel
// Enumeration defining severity of an error.
//
// Values:
// LOG_NOTE - A note, highest priority so that they are always
// printed, not used for errors, only for temporary
// notes.
// LOG_VERBOSE - Verbose warning, lowest priority.
// LOG_WARNING - A warning, used for non critical failures.
// LOG_ERROR - Normal error, used for potential serious failures.
// LOG_CRITICAL - Critical error, used for failures which are threats to
// stability.
enum LogLevel
{
LOG_NOTE,
LOG_VERBOSE,
LOG_WARNING,
LOG_ERROR,
LOG_CRITICAL
};
// Class: LogSink
// Base class for all LogSinks to be used with <Log>, derived classes must
// define message(LogLevel level, std::string string).
// A LogSink recieves any messages passed to the log it's registered with.
2005-01-27 05:24:11 +00:00
//
// Children:
// <ConsoleSink>
// <TextSink>
// <HTMLSink>
class LogSink
{
// Group: (Con/De)structors
public:
// Function: LogSink
// LogSink constructor, requires a name.
//
// Parameters:
// name_ - Name of LogSink, every LogSink should have a unique name.
2005-02-07 01:48:25 +00:00
LogSink(const std::string& name);
// Function: ~LogSink
// Virtual destructor, available to make inheritance safe.
virtual ~LogSink();
// Group: Functions
public:
// Function: writeMessage
// Pure virtual function which derived classes must define to write the
// message.
//
// Parameters:
// level - <LogLevel> of log event.
// msg - String describing log message.
2005-02-07 01:48:25 +00:00
virtual void writeMessage(LogLevel level, const std::string& msg)=0;
// Group: Accessors
public:
// Function: getName
// Gets name of the sink.
//
// Returns:
// Name of the LogSink.
std::string getName() const;
private:
std::string name_;
//assignment left undefined
LogSink(const LogSink&);
LogSink& operator=(const LogSink&);
};
// Type: LogSinkPtr
// Pointer to a log sink, used since LogSink is abstract and will always
// be accessed via a pointer.
typedef shared_ptr<LogSink> LogSinkPtr;
// Class: ConsoleSink
// <LogSink> to be used with <Log> for simple console output.
2005-01-27 05:24:11 +00:00
//
// See Also:
// <TextSink>, <HTMLSink>
//
// Parent:
// <LogSink>
class ConsoleSink : public LogSink
{
public:
2005-02-07 01:48:25 +00:00
ConsoleSink(const std::string& name);
virtual ~ConsoleSink();
2005-02-07 01:48:25 +00:00
virtual void writeMessage(LogLevel level, const std::string& msg);
};
// Class: TextSink
// <LogSink> to be used with <Log> for simple text file output.
2005-01-27 05:24:11 +00:00
//
// See Also:
// <ConsoleSink>, <HTMLSink>
//
// Parent:
// <LogSink>
class TextSink : public LogSink
{
public:
2005-02-07 01:48:25 +00:00
TextSink(const std::string& name);
virtual ~TextSink();
2005-02-07 01:48:25 +00:00
virtual void writeMessage(LogLevel level, const std::string& msg);
private:
std::ofstream out_;
};
2005-01-27 05:24:11 +00:00
// Class: HTMLSink
// <LogSink> to be used with <Log> for simple HTML output.
2005-01-27 05:24:11 +00:00
//
// See Also:
// <TextSink>, <ConsoleSink>
//
// Parent:
// <LogSink>
class HTMLSink : public LogSink
{
public:
2005-02-07 01:48:25 +00:00
HTMLSink(const std::string& name);
2005-01-27 05:24:11 +00:00
virtual ~HTMLSink();
2005-02-07 01:48:25 +00:00
virtual void writeMessage(LogLevel level, const std::string& msg);
private:
std::ofstream out_;
};
}
2005-02-13 22:12:02 +00:00
#endif //PHOTON_LOGSINK_HPP