casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Private Attributes
casa::LoggerHolder Class Reference

Class holding a hierarchy of loggers. More...

#include <LoggerHolder.h>

List of all members.

Public Member Functions

 LoggerHolder (Bool nullSink=False)
 Create with a NullSink or MemoryLogSink (default).
 LoggerHolder (const String &logTableName, Bool isWritable)
 Create with a TableLogSink.
 LoggerHolder (const LoggerHolder &)
 Copy constructor (reference sematics).
 ~LoggerHolder ()
LoggerHolderoperator= (const LoggerHolder &)
 Assignment (reference semantics).
void addParent (const LoggerHolder &)
 Add a logger from a parent.
void append (const LoggerHolder &other)
 Append the entries of the other logger to this one.
void reopenRW ()
 Reopen a readonly logtable for read/write (if needed).
void reopen ()
 Reopen the log table if needed (after a tempClose).
void tempClose (Bool closeParents=True) const
 Temporarily close all log tables.
void unlock ()
 Unlock the log table.
void flush ()
 Flush the log table.
void resync ()
 Resync the log table (if needed).
Bool isTempClosed () const
 Is the log table temporarily closed?
LogIOlogio ()
 Get access to the logger.
LogSinksink ()
 Get access to the log sink (reopen the log table if needed).
const LogSinksink () const
void clear ()
 Clear the log.
void removeParents ()
 Remove all parents.
const Block< LoggerHolder > & parents () const
 Return the block of parents.

Private Attributes

CountedPtr< LoggerHolderRepitsRep
typedef LoggerHolderIterator const_iterator
 Define the STL-style iterators.
const_iterator begin () const
 Get the begin and end iterator object.
const_iterator end () const

Detailed Description

Class holding a hierarchy of loggers.

Intended use:

Public interface

Review Status

Test programs:
tLoggerHolder

Prerequisite

Synopsis

The LoggerHolder class implements a hierarchy of loggers. It has a log sink of its own and can have multiple parent LoggerHolder objects representing the log info of parent objects. It is used by class ImageInterface , but could also be used elsewhere.

The sink of a LoggerHolder can be different depending on the type of image. E.g. for a transient image it can be a MemoryLogSink , while for a persistent image it will be a TableLogSink .
An important feature is that an LoggerHolder can have zero or more parent LoggerHolder objects. In that way the log of the parent object of an image object can be made part of the log of the image object itself, without having to copy the log.

To iterate through all messages in a LoggerHolder (including all parents), the LoggerHolderIterator can be used. This is an STL-style const_iterator object.

LoggerHolder uses reference counting (of class LoggerHolderRep ) to be able to retain the object after the (ImageInterface) object containing it is gone. Otherwise classes like SubImage would lose their log info.

Example

     LoggerHolder logger ("tLoggerHolder_tmp.log", True);
     logger.logio() << "test1" << LogIO::POST;
     logger.logio() << "test2" << LogIO::POST;
     for (LoggerHolder::const_iterator iter = logger.begin();
          iter != logger.end();
          iter++) {
       cout << iter->time() << ' ' << iter->message() << endl;
     }

This example shows the construction of an LoggerHolder with a TableLogSink sink. Thereafter some messages are written. The latter part shows how to iterate through all messages.

     LoggerHolder logger (False);
     logger.addParent (parent.logger());
     logger.logio() << "test1" << LogIO::POST;
     logger.logio() << "test2" << LogIO::POST;

This example shows the construction of an LoggerHolder with a MemoryLogSink sink (e.g. for a SubImage). Thereafter the logger of the parent image is added to it. Finally some messages are written.

Motivation

This class simplifies and unifies all Image logging activities.

Definition at line 119 of file LoggerHolder.h.


Member Typedef Documentation

Define the STL-style iterators.

 Only a const forward iterator is available.
 It makes it possible to iterate through all messages in the logger.
       LoggerHolder logger("log.name", False)
       for (LoggerHolder::const_iterator iter=arr.begin();
            iter!=arr.end(); iter++) {
         cout << iter.message() << endl;
       }

STL-style typedefs.

Definition at line 200 of file LoggerHolder.h.


Constructor & Destructor Documentation

casa::LoggerHolder::LoggerHolder ( Bool  nullSink = False) [explicit]

Create with a NullSink or MemoryLogSink (default).

casa::LoggerHolder::LoggerHolder ( const String logTableName,
Bool  isWritable 
)

Create with a TableLogSink.

Copy constructor (reference sematics).


Member Function Documentation

Add a logger from a parent.

void casa::LoggerHolder::append ( const LoggerHolder other)

Append the entries of the other logger to this one.

Referenced by casa::ImageInterface< Complex >::appendLog().

Get the begin and end iterator object.

Definition at line 569 of file LoggerHolder.h.

Clear the log.

It removes the parents and removes all messages from the sink.

Definition at line 573 of file LoggerHolder.h.

Flush the log table.

Is the log table temporarily closed?

Definition at line 549 of file LoggerHolder.h.

References casa::LoggerHolderRep::isTempClosed(), and itsRep.

Get access to the logger.

It assumes that it will be used to post a message, so it reopens the log table for read/write if needed).

Definition at line 553 of file LoggerHolder.h.

References itsRep, and casa::LoggerHolderRep::logio().

Referenced by casa::ImageInterface< Complex >::logSink().

LoggerHolder& casa::LoggerHolder::operator= ( const LoggerHolder )

Assignment (reference semantics).

const Block< LoggerHolder > & casa::LoggerHolder::parents ( ) const [inline]

Return the block of parents.

Definition at line 565 of file LoggerHolder.h.

References itsRep, and casa::LoggerHolderRep::parents().

Remove all parents.

void casa::LoggerHolder::reopen ( ) [inline]

Reopen the log table if needed (after a tempClose).

Definition at line 545 of file LoggerHolder.h.

References itsRep, and casa::LoggerHolderRep::reopen().

Reopen a readonly logtable for read/write (if needed).

Resync the log table (if needed).

Get access to the log sink (reopen the log table if needed).

It is not assumed you want to write. If you want to do that, you should first call reopenRW() to ensure you can write.

Definition at line 557 of file LoggerHolder.h.

References itsRep, and casa::LoggerHolderRep::sink().

const LogSink & casa::LoggerHolder::sink ( ) const [inline]

Definition at line 561 of file LoggerHolder.h.

References itsRep, and casa::LoggerHolderRep::sink().

void casa::LoggerHolder::tempClose ( Bool  closeParents = True) const

Temporarily close all log tables.

By default the possible parent log tables are also closed.

Unlock the log table.


Member Data Documentation

Definition at line 207 of file LoggerHolder.h.

Referenced by isTempClosed(), logio(), parents(), reopen(), and sink().


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