//
// Log.h
//
// Interface for logging sysadm messages
//
//
// Copyright (c) 1998, 2000 Silicon Graphics, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of version 2.1 of the GNU Lesser General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it would be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// Further, this software is distributed without any warranty that it is
// free of the rightful claim of any third person regarding infringement
// or the like. Any license provided herein, whether implied or
// otherwise, applies only to this software file. Patent licenses, if
// any, provided herein do not apply to combinations of this program
// with other software, or any other product whatsoever.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
// USA.
//
// Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
// Mountain View, CA 94043, or http://www.sgi.com/
//
// For further information regarding this notice, see:
// http://oss.sgi.com/projects/GenInfo/NoticeExplan/
//
#ifndef _SYSADM_LOG_H
#define _SYSADM_LOG_H
#ident "$Revision: 1.5 $"
#include <stdarg.h>
#include <sysadm/CollectionOf.h>
BEGIN_NAMESPACE(sysadm);
class LogListener;
/**
* Log is an interface that sysadm services use to log various levels
* of messages. The destination of log messages is controlled by
* sysadmd command line options (in /etc/inetd.conf), and log messages
* are also available to clients via the "log" service.
*
* Messages logged via Log do not go to syslog unless specified on the
* sysadmd command line in /etc/inetd.conf.
*
* Log notifies its list of LogListeners whenever a message is
* logged. The LogListeners output the messages to files, syslog, or
* whatever is appropriate.
*
* Each log message consists of a "module" string that represents the
* service the message is coming from (e.g. sysadmd), a "level" (which
* is implicit in the static logging methods), and a printf-style
* format string and varargs.
*/
class Log {
public:
/**
* Each message that's logged has a level associated with it.
* Messages can be filtered based on their levels.
*
* These values correspond to values in the java version of this
* class, so don't change them arbitrarily.
*/
enum Level {
TRACE = 0x01, // Trace execution.
DEBUG = 0x02, // Message for debugging purposes.
INFO = 0x04, // Informational message.
WARNING = 0x08, // Warning message.
ERROR = 0x10, // Non-fatal error message.
FATAL = 0x20, // Fatal error.
ALL = TRACE | DEBUG | INFO | WARNING | ERROR | FATAL,
};
/**
* MAXLEN is the longest a message can be.
*/
enum { MAXLEN = 4096 };
/**
* These static methods are used by sysadmd code and associated
* services for logging.
*/
static void trace(const char* module, const char* format, ...);
static void debug(const char* module, const char* format, ...);
static void info(const char* module, const char* format, ...);
static void warning(const char* module, const char* format, ...);
static void error(const char* module, const char* format, ...);
static void fatal(const char* module, const char* format, ...);
/**
* Convenience method for turning "level" into a localized
* string.
*/
static const char* levelToString(Level level);
/**
* Get access to an instance of Log, for calling one of the
* non-static methods.
*/
static Log& getLog();
/**
* Log a message. The static logging methods all end up calling
* this eventually.
*/
void message(const char* module, Level level, const char* format,
va_list args);
/**
* Add a listener to be notified of messages.
*/
void adoptLogListener(LogListener* listener);
/**
* Remove a listener from the the list of listeners that get
* notified when a message arrives.
*/
LogListener* orphanLogListener(LogListener* listener);
/**
* Remove and delete a listener from the list of listeners that
* get notified when a message arrives.
*/
void removeLogListener(LogListener* listener);
private:
// Constructor.
Log();
// Intentionally undefined.
Log(const Log&);
Log& operator=(const Log&);
CollectionOf<LogListener> _listeners;
};
END_NAMESPACE(sysadm);
#endif // _SYSADM_LOG_H
| Generated by: rusty@irem on Mon Sep 18 18:07:52 2000, using kdoc 2.0a36. |