Ceylan::Log::LogAggregator Class Reference

This abstract class is meant to store messages targeted at a set of channels which are conveyed thanks to a Log transport, and to generate a view of it. More...

#include <CeylanLogAggregator.h>

Inheritance diagram for Ceylan::Log::LogAggregator:

Inheritance graph
[legend]
Collaboration diagram for Ceylan::Log::LogAggregator:

Collaboration graph
[legend]

List of all members.

Classes

class  LogAggregatorException
 Exception raised by aggregators. More...

Public Types

enum  TextOutputFormat { rawText, html }
 Defines what text output formats for TextDisplayable instances are available. More...

Public Member Functions

 LogAggregator (bool useGlobalLevelOfDetail=true, bool beSmart=true)
 Constructs a LogAggregator, whose role is to transform log messages into browsable files, according to various encodings (raw, HTML, etc.
virtual ~LogAggregator () throw ()
 Basic virtual destructor.
virtual LogChannelcreateBasicChannel (const std::string &channelName)
 Creates, if possible, a new basic channel whose name is channelName.
virtual ObjectChannelcreateObjectChannel (LogMessage &message)
 Creates, if possible, a new object channel corresponding to the specified Loggable message.
virtual void aggregate ()=0
 Aggregates all channel and log messages informations in the implementation's fashion.
virtual bool hasChannel (const std::string &channelName) const
 Tells whether this aggregator has already a channel named channelName.
virtual LogChannelfindChannel (const std::string &channelName) const
 Finds, if any, a channel in LogAggregator's list of channels whose name is channelName.
virtual void transferChannel (LogChannel &source, LogChannel &target)
 Transfers all the messages of source into target, updates their channel identifier so that it matches the one of target.
virtual void removeChannel (LogChannel &target)
 Removes completly a log channel.
virtual void store (LogMessage &message)
 Classify and stores message internally, according to the corresponding channels they contain.
virtual const std::string toString (Ceylan::VerbosityLevels level=Ceylan::high) const
 Returns a user-friendly description of the state of this object.

Static Public Member Functions

static const std::string ToString (std::list< TextDisplayable * > displayables, Ceylan::VerbosityLevels level=Ceylan::high)
 Returns a user-friendly description of this list of pointers to text displayable instances.
static TextOutputFormat GetOutputFormat ()
 Returns the current overall text format to be used by TextDisplayable instances.
static void SetOutputFormat (TextOutputFormat newOutputFormat)
 Sets the current overall text format to be used by TextDisplayable instances.

Static Public Attributes

static const LevelOfDetail DefaultGlobalLevelOfDetail = Ceylan::Log::DefaultLevelOfDetailForListener
 Default value for the aggregator-wide level of detail.

Protected Member Functions

virtual LogChannelfindBasicChannel (const std::string &basicChannelName) const
 Finds, if any, a Log channel in LogAggregator's list of channels whose name is channelName.
virtual ObjectChannelfindObjectChannel (const std::string &nonPrefixedChannelName) const
 Finds, if any, an Object channel in LogAggregator's list of object channels whose short name is channelName (no protocol prefix or separator allowed).
virtual void createBasicChannelFrom (LogMessage &message)
 Creates a basic (non protocol-prefixed) channel from specified message, which is automatically added to this new channel.
virtual void createLoggableChannelFrom (LogMessage &message)
 Creates a Loggable channel from specified message.
virtual void storeBasicMessage (LogMessage &basicLogMessage)
 Classify and stores basic log message basicLogMessage internally, according to the corresponding channel it contains.
virtual void storeObjectMessage (LogMessage &objectLogMessage)
 Classify and stores object log message objectLogMessage internally, according to the corresponding channel it contains.
virtual void demangle (LogMessage &objectLogMessage)
 Corrects, if possible, any mangled class name in specified message.
virtual Ceylan::VerbosityLevels getOverallVerbosityLevel () const
 Returns the most appropriate level of detail for log channel output, depending only on the state of the aggregator.
virtual Ceylan::VerbosityLevels getMessageVerbosityLevel (const LogMessage &message) const
 Returns the most appropriate level of detail for log message output, depending on the state of the aggregator and on the message's level of detail.

Static Protected Member Functions

static Ceylan::VerbosityLevels ConvertListenerLevelOfDetailToVerbosityLevel (LevelOfDetail level)
 Converts a level of detail of a log listener into a corresponding verbosity level.
static Ceylan::VerbosityLevels ConvertMessageLevelOfDetailToVerbosityLevel (LevelOfDetail level)
 Converts a level of detail of a log message into a corresponding verbosity level.

Protected Attributes

std::list< LogChannel * > _channelList
 List of all known Log channels.
bool _beSmart
 Tells whether this aggregator should cope with mangled class names.
bool _useGlobalLevelOfDetail
 Tells whether a global (aggregator-wide) level of detail for channels should be used.
LevelOfDetail _globalLevelOfDetail
 Defines the aggregator-wide level of detail, used if _useGlobalLevelOfDetail is set.

Static Protected Attributes

static TextOutputFormat _OutputFormat = rawText
 The text format to be used currently by TextDisplayable instances.

Private Member Functions

 LogAggregator (const LogAggregator &source)
 Copy constructor made private to ensure that it will be never called.
LogAggregatoroperator= (const LogAggregator &source)
 Assignment operator made private to ensure that it will be never called.


Detailed Description

This abstract class is meant to store messages targeted at a set of channels which are conveyed thanks to a Log transport, and to generate a view of it.

For the moment, Loggable and Object messages are managed as if they were equivalent (whereas Object are specialized Loggable).

Note:
Smart aggregators can deal with mangled Object class names, and auto-correct these names if they receive at least one non-mangled message.
As, apparently, from constructors and destructors, class names, with gcc, are mangled, objects that did not send a message from elsewhere remain mangled.

See also:
LogSource, LogListener, LogTransport

Definition at line 84 of file CeylanLogAggregator.h.


Member Enumeration Documentation

Defines what text output formats for TextDisplayable instances are available.

Enumerator:
rawText 
html 

Definition at line 124 of file CeylanTextDisplayable.h.


Constructor & Destructor Documentation

LogAggregator::LogAggregator ( bool  useGlobalLevelOfDetail = true,
bool  beSmart = true 
) [explicit]

Constructs a LogAggregator, whose role is to transform log messages into browsable files, according to various encodings (raw, HTML, etc.

).

Parameters:
useGlobalLevelOfDetail tells whether log channels levels of detail are to be overriden by the aggregator-wide one.
beSmart tells whether this aggregator should be smart, i.e. should detect log messages whose class name is mangled, and correct that so that they are stored in the right channel. Note that instances sending logs from their destructor might prevent the smart aggregator from overcoming the mangling issue.
Note:
Smart aggregators might spend much more time than basic ones when creating a new channel.

Definition at line 78 of file CeylanLogAggregator.cc.

References CEYLAN_LOG.

LogAggregator::~LogAggregator (  )  throw () [virtual]

Basic virtual destructor.

Definition at line 90 of file CeylanLogAggregator.cc.

References _channelList, CEYLAN_LOG, Ceylan::low, and Ceylan::toString().

Ceylan::Log::LogAggregator::LogAggregator ( const LogAggregator source  )  [private]

Copy constructor made private to ensure that it will be never called.

The compiler should complain whenever this undefined constructor is called, implicitly or not.


Member Function Documentation

virtual void Ceylan::Log::LogAggregator::aggregate (  )  [pure virtual]

Aggregates all channel and log messages informations in the implementation's fashion.

Exceptions:
LogAggregatorException if the operation fails.

Implemented in Ceylan::Log::LogAggregatorConsole, Ceylan::Log::LogAggregatorHTML, and Ceylan::Log::LogAggregatorRaw.

Ceylan::VerbosityLevels LogAggregator::ConvertListenerLevelOfDetailToVerbosityLevel ( LevelOfDetail  level  )  [static, protected]

Converts a level of detail of a log listener into a corresponding verbosity level.

Definition at line 824 of file CeylanLogAggregator.cc.

References Ceylan::Log::DefaultLevelOfDetailForListener, Ceylan::high, Ceylan::low, Ceylan::Log::MaximumLevelOfDetailForListener, and Ceylan::medium.

Referenced by getOverallVerbosityLevel().

Ceylan::VerbosityLevels LogAggregator::ConvertMessageLevelOfDetailToVerbosityLevel ( LevelOfDetail  level  )  [static, protected]

Converts a level of detail of a log message into a corresponding verbosity level.

Definition at line 856 of file CeylanLogAggregator.cc.

References Ceylan::Log::DefaultLevelOfDetailForMessage, Ceylan::high, Ceylan::low, Ceylan::Log::MaximumLevelOfDetailForMessage, and Ceylan::medium.

Referenced by getMessageVerbosityLevel().

LogChannel & LogAggregator::createBasicChannel ( const std::string &  channelName  )  [virtual]

Creates, if possible, a new basic channel whose name is channelName.

Definition at line 120 of file CeylanLogAggregator.cc.

References _channelList, CEYLAN_LOG, and hasChannel().

Referenced by createBasicChannelFrom().

void LogAggregator::createBasicChannelFrom ( LogMessage message  )  [protected, virtual]

Creates a basic (non protocol-prefixed) channel from specified message, which is automatically added to this new channel.

Definition at line 397 of file CeylanLogAggregator.cc.

References Ceylan::Log::LogChannel::addMessage(), createBasicChannel(), and Ceylan::Log::LogMessage::getChannelName().

Referenced by createLoggableChannelFrom(), and storeBasicMessage().

void LogAggregator::createLoggableChannelFrom ( LogMessage message  )  [protected, virtual]

Creates a Loggable channel from specified message.

Parameters:
message the incoming Loggable message which triggers this channel creation.
Note:
If the incoming message that would lead to create a channel A has the same address as past events which led to the creation of a channel B, then all the messages in B will be transferred into a newly created channel A, no matter A and B. If messages are sent from destructors, then the channel will be finally renamed as the base class, and not the specialized class being effectively used. So sending messages from destructors should be avoided.

Definition at line 413 of file CeylanLogAggregator.cc.

References _beSmart, _channelList, Ceylan::Log::ObjectChannel::addMessage(), CEYLAN_LOG, createBasicChannelFrom(), createObjectChannel(), Ceylan::Log::ObjectIdentifier::differentButMatches(), Ceylan::Log::ObjectIdentifier::generateFromChannelName(), Ceylan::Log::LogMessage::getChannelName(), Ceylan::Log::Loggable::GetEmbeddedChannelName(), Ceylan::Exception::toString(), and transferChannel().

Referenced by storeObjectMessage().

ObjectChannel & LogAggregator::createObjectChannel ( LogMessage message  )  [virtual]

Creates, if possible, a new object channel corresponding to the specified Loggable message.

Definition at line 142 of file CeylanLogAggregator.cc.

References _channelList, CEYLAN_LOG, Ceylan::Log::LogMessage::getChannelName(), Ceylan::Log::Loggable::GetEmbeddedChannelName(), and hasChannel().

Referenced by createLoggableChannelFrom().

void LogAggregator::demangle ( LogMessage objectLogMessage  )  [protected, virtual]

Corrects, if possible, any mangled class name in specified message.

Definition at line 692 of file CeylanLogAggregator.cc.

References Ceylan::demangleSymbol(), Ceylan::Log::LogMessage::getChannelName(), Ceylan::Log::ObjectIdentifier::Separator, and Ceylan::Log::LogMessage::setChannelName().

Referenced by storeObjectMessage().

LogChannel * LogAggregator::findBasicChannel ( const std::string &  basicChannelName  )  const [protected, virtual]

Finds, if any, a Log channel in LogAggregator's list of channels whose name is channelName.

Returns:
the basic channel, if found, otherwise a null pointer.
Note:
this method is dedicated to find basic log channels, not object ones.

Definition at line 302 of file CeylanLogAggregator.cc.

References _channelList, and CEYLAN_LOG.

Referenced by findChannel(), and storeBasicMessage().

LogChannel * LogAggregator::findChannel ( const std::string &  channelName  )  const [virtual]

Finds, if any, a channel in LogAggregator's list of channels whose name is channelName.

Returns:
the channel, if found, otherwise a null pointer.
Note:
if the specified channel name is an object channel name (typically starting by 'loggable://'), search will be only performed on object channels.

Definition at line 181 of file CeylanLogAggregator.cc.

References CEYLAN_LOG, findBasicChannel(), findObjectChannel(), Ceylan::Log::Loggable::GetEmbeddedChannelName(), and Ceylan::Log::Loggable::IsALoggableChannelName().

Referenced by hasChannel().

ObjectChannel * LogAggregator::findObjectChannel ( const std::string &  nonPrefixedChannelName  )  const [protected, virtual]

Finds, if any, an Object channel in LogAggregator's list of object channels whose short name is channelName (no protocol prefix or separator allowed).

Returns:
the object channel, if found, otherwise a null pointer.
Note:
this method is dedicated to find object log channels, not basic ones.

Definition at line 349 of file CeylanLogAggregator.cc.

References _channelList, CEYLAN_LOG, and Ceylan::Log::LogChannel::getName().

Referenced by findChannel(), and storeObjectMessage().

Ceylan::VerbosityLevels LogAggregator::getMessageVerbosityLevel ( const LogMessage message  )  const [protected, virtual]

Returns the most appropriate level of detail for log message output, depending on the state of the aggregator and on the message's level of detail.

Basically, maps a global or local level of detail to a verbosity level.

Definition at line 790 of file CeylanLogAggregator.cc.

References _globalLevelOfDetail, _useGlobalLevelOfDetail, CEYLAN_LOG, ConvertMessageLevelOfDetailToVerbosityLevel(), Ceylan::Log::LogMessage::getLevelOfDetail(), and Ceylan::toString().

Referenced by Ceylan::Log::LogAggregatorRaw::write(), and Ceylan::Log::LogAggregatorConsole::write().

TextDisplayable::TextOutputFormat TextDisplayable::GetOutputFormat (  )  [static, inherited]

Ceylan::VerbosityLevels LogAggregator::getOverallVerbosityLevel (  )  const [protected, virtual]

Returns the most appropriate level of detail for log channel output, depending only on the state of the aggregator.

Basically, maps a global or local level of detail to a verbosity level.

Definition at line 760 of file CeylanLogAggregator.cc.

References _globalLevelOfDetail, _useGlobalLevelOfDetail, CEYLAN_LOG, ConvertListenerLevelOfDetailToVerbosityLevel(), Ceylan::Log::DefaultLevelOfDetailForListener, and Ceylan::toString().

Referenced by Ceylan::Log::LogAggregatorRaw::write(), and Ceylan::Log::LogAggregatorConsole::write().

bool LogAggregator::hasChannel ( const std::string &  channelName  )  const [virtual]

Tells whether this aggregator has already a channel named channelName.

Exceptions:
LogException if an inconsistency is detected in channel list.

Definition at line 171 of file CeylanLogAggregator.cc.

References findChannel().

Referenced by createBasicChannel(), and createObjectChannel().

LogAggregator& Ceylan::Log::LogAggregator::operator= ( const LogAggregator source  )  [private]

Assignment operator made private to ensure that it will be never called.

The compiler should complain whenever this undefined operator is called, implicitly or not.

void LogAggregator::removeChannel ( LogChannel target  )  [virtual]

Removes completly a log channel.

Definition at line 267 of file CeylanLogAggregator.cc.

References _channelList, CEYLAN_LOG, and Ceylan::Log::LogChannel::getName().

Referenced by transferChannel().

void TextDisplayable::SetOutputFormat ( TextOutputFormat  newOutputFormat  )  [static, inherited]

Sets the current overall text format to be used by TextDisplayable instances.

Parameters:
newOutputFormat the new output format.

Definition at line 72 of file CeylanTextDisplayable.cc.

References Ceylan::TextDisplayable::_OutputFormat.

Referenced by Ceylan::Log::LogHolder::LogHolder().

void LogAggregator::store ( LogMessage message  )  [virtual]

Classify and stores message internally, according to the corresponding channels they contain.

Parameters:
message the log message to be stored, the aggregator takes ownership of it.

Reimplemented in Ceylan::Log::LogAggregatorConsole, Ceylan::Log::LogAggregatorHTML, and Ceylan::Log::LogAggregatorRaw.

Definition at line 279 of file CeylanLogAggregator.cc.

References CEYLAN_LOG, Ceylan::Log::LogMessage::getChannelName(), Ceylan::Log::Loggable::IsALoggableChannelName(), storeBasicMessage(), storeObjectMessage(), and Ceylan::Log::LogMessage::toString().

Referenced by Ceylan::Log::LogListener::sendToAggregator().

void LogAggregator::storeBasicMessage ( LogMessage basicLogMessage  )  [protected, virtual]

Classify and stores basic log message basicLogMessage internally, according to the corresponding channel it contains.

Parameters:
message the basic log message to be stored, the aggregator takes ownership of it.

Definition at line 597 of file CeylanLogAggregator.cc.

References CEYLAN_LOG, createBasicChannelFrom(), findBasicChannel(), and Ceylan::Log::LogMessage::getChannelName().

Referenced by store().

void LogAggregator::storeObjectMessage ( LogMessage objectLogMessage  )  [protected, virtual]

Classify and stores object log message objectLogMessage internally, according to the corresponding channel it contains.

Parameters:
objectLogMessage the object log message to be stored, the aggregator takes ownership of it.

Definition at line 628 of file CeylanLogAggregator.cc.

References Ceylan::Log::ObjectChannel::addMessage(), CEYLAN_LOG, createLoggableChannelFrom(), demangle(), findObjectChannel(), Ceylan::Log::LogMessage::getChannelName(), Ceylan::Log::Loggable::GetEmbeddedChannelName(), and Ceylan::Log::LogMessage::setChannelName().

Referenced by store().

const std::string TextDisplayable::ToString ( std::list< TextDisplayable * >  displayables,
Ceylan::VerbosityLevels  level = Ceylan::high 
) [static, inherited]

Returns a user-friendly description of this list of pointers to text displayable instances.

Parameters:
displayables a list of pointers to TextDisplayable instances/
level the requested verbosity level.
Note:
Text output format is determined from overall settings.
See also:
toString, Ceylan::VerbosityLevels

Definition at line 45 of file CeylanTextDisplayable.cc.

References Ceylan::formatStringList().

const string LogAggregator::toString ( Ceylan::VerbosityLevels  level = Ceylan::high  )  const [virtual]

Returns a user-friendly description of the state of this object.

Parameters:
level the requested verbosity level.
Note:
Text output format is determined from overall settings.
See also:
TextDisplayable

Implements Ceylan::TextDisplayable.

Reimplemented in Ceylan::Log::LogAggregatorConsole, Ceylan::Log::LogAggregatorHTML, and Ceylan::Log::LogAggregatorRaw.

Definition at line 882 of file CeylanLogAggregator.cc.

References _beSmart, and _channelList.

Referenced by Ceylan::Log::LogPlug::ToString(), and Ceylan::Log::LogListener::toString().

void LogAggregator::transferChannel ( LogChannel source,
LogChannel target 
) [virtual]

Transfers all the messages of source into target, updates their channel identifier so that it matches the one of target.

This method helps correcting wrong channel names due to mangled class names.

Note:
As the ownership of transferred message is transferred to the target channel, the source message pointers are set to null so that, when source channel will be deallocated, messages will not be touched.

Definition at line 204 of file CeylanLogAggregator.cc.

References Ceylan::Log::LogChannel::_messages, Ceylan::Log::LogChannel::addMessage(), CEYLAN_LOG, Ceylan::Log::LogChannel::getName(), Ceylan::low, removeChannel(), Ceylan::Log::LogMessage::setChannelName(), Ceylan::Log::LogMessage::toString(), and Ceylan::Log::LogChannel::toString().

Referenced by createLoggableChannelFrom().


Member Data Documentation

Defines the aggregator-wide level of detail, used if _useGlobalLevelOfDetail is set.

Reimplemented in Ceylan::Log::LogAggregatorConsole, and Ceylan::Log::LogAggregatorHTML.

Definition at line 435 of file CeylanLogAggregator.h.

Referenced by getMessageVerbosityLevel(), and getOverallVerbosityLevel().

TextDisplayable::TextOutputFormat TextDisplayable::_OutputFormat = rawText [static, protected, inherited]

The text format to be used currently by TextDisplayable instances.

Note:
Defaults to raw text.

Definition at line 158 of file CeylanTextDisplayable.h.

Referenced by Ceylan::TextDisplayable::GetOutputFormat(), and Ceylan::TextDisplayable::SetOutputFormat().

Tells whether a global (aggregator-wide) level of detail for channels should be used.

Note:
if set, will override log channels levels of details.

Reimplemented in Ceylan::Log::LogAggregatorConsole, and Ceylan::Log::LogAggregatorHTML.

Definition at line 427 of file CeylanLogAggregator.h.

Referenced by getMessageVerbosityLevel(), getOverallVerbosityLevel(), and Ceylan::Log::LogAggregatorRaw::toString().

Default value for the aggregator-wide level of detail.

Reimplemented in Ceylan::Log::LogAggregatorHTML.

Definition at line 247 of file CeylanLogAggregator.h.


The documentation for this class was generated from the following files:

Generated on Thu Jun 4 20:40:23 2009 for Ceylan by  doxygen 1.5.8