//# LogSinkInterface.h: Accepts LogMessages and posts them to some destination //# Copyright (C) 1996,2000,2001,2003 //# Associated Universities, Inc. Washington DC, USA. //# //# This library is free software; you can redistribute it and/or modify it //# under the terms of the GNU Library General Public License as published by //# the Free Software Foundation; either version 2 of the License, or (at your //# option) any later version. //# //# This library is distributed in the hope that it will be useful, but WITHOUT //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public //# License for more details. //# //# You should have received a copy of the GNU Library General Public License //# along with this library; if not, write to the Free Software Foundation, //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. //# //# Correspondence concerning AIPS++ should be addressed as follows: //# Internet email: aips2-request@nrao.edu. //# Postal address: AIPS++ Project Office //# National Radio Astronomy Observatory //# 520 Edgemont Road //# Charlottesville, VA 22903-2475 USA //# //# //# $Id$ #ifndef CASA_LOGSINKINTERFACE_H #define CASA_LOGSINKINTERFACE_H //# Includes #include #include namespace casacore { //# NAMESPACE CASACORE - BEGIN // //Accepts LogMessages and posts them to some destination // // // // // //
  • LogMessage //
  • LogFilterInterface // // // // Log as in "Log Book." Sink from its common usage ("source/sink") as a thing // which can accept some substance or energy. Interface because this is an // abstract, not concrete, class. // // // // This abstract base class is not intended for applications programmers. // Instead they should look at LogSink. // // This class defines a minimal "posting" interface for all objects which accept // log messages. The fundamental model of a LogSinkInterface is: //
      //
    1. That it contains a // LogFilterInterface that is // used to accept or reject messages; and //
    2. That it has a post message that takes a log message; and, if it passes // the filter, does something with it (prints it to a stream, saves it to // a table, ...). //
    // There is no notion of local vs global sinks - that is imposed by // LogSink. //
    // // // // LogSinkInterface &ref = ...; // LogMessage message(...); // ref.postLocally(message); // if (ref.filter().lowestPriority() != LogMessage::DEBUGGING) { // ref.filter(LogMessage::DEBUGGING); // } // // For a more complete example see Logging.h. // // // // Make it straightforward to extend the number of places a message may be // in the future through derivation. // // // //
  • Nothing known. // class LogSinkInterface { public: // Create with a NORMAL filter. LogSinkInterface(); // Create with the supplied filter. LogSinkInterface(const LogFilterInterface &filter); // Copy semantics - copy the filter from other to this // LogSinkInterface(const LogSinkInterface &other); LogSinkInterface &operator=(const LogSinkInterface &); // virtual ~LogSinkInterface(); // Get/set the filter. // virtual const LogFilterInterface &filter() const; virtual LogSinkInterface &filter(const LogFilterInterface &filter); // // Get number of messages in sink. virtual uInt nelements() const; // Get given part of the i-th message from the sink. // virtual Double getTime (uInt i) const; virtual String getPriority (uInt i) const; virtual String getMessage (uInt i) const; virtual String getLocation (uInt i) const; virtual String getObjectID (uInt i) const; // // This function must be over-ridden in derived classes. If the filter // passes the message, do what is necessary with the message and return // True. virtual Bool postLocally(const LogMessage &message)= 0; // Write any pending output. virtual void flush (Bool global=True); // Write a message (usually from another logsink) into the local one. // The default implementation does nothing. virtual void writeLocally (Double time, const String& message, const String& priority, const String& location, const String& objectID); // Clear the local sink (i.e. remove all messages from it). // The default implementation does nothing. virtual void clearLocally(); // Returns the id for this class... static String localId( ); // Returns the id of the LogSink in use... virtual String id( ) const = 0; // Write to cerr too virtual void cerrToo(bool cerr2); void setTaskName(const String &theTask){taskName=theTask;} private: LogFilterInterface* filter_p; protected: String taskName; }; } //# NAMESPACE CASACORE - END #endif