⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log.h

📁 hp snmp++ (support ipv6)
💻 H
字号:
/*_############################################################################  _##   _##  log.h    _##  _##  SNMP++v3.2.20  _##  -----------------------------------------------  _##  Copyright (c) 2001-2006 Jochen Katz, Frank Fock  _##  _##  This software is based on SNMP++2.6 from Hewlett Packard:  _##    _##    Copyright (c) 1996  _##    Hewlett-Packard Company  _##    _##  ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.  _##  Permission to use, copy, modify, distribute and/or sell this software   _##  and/or its documentation is hereby granted without fee. User agrees   _##  to display the above copyright notice and this license notice in all   _##  copies of the software and any documentation of the software. User   _##  agrees to assume all liability for the use of the software;   _##  Hewlett-Packard and Jochen Katz make no representations about the   _##  suitability of this software for any purpose. It is provided   _##  "AS-IS" without warranty of any kind, either express or implied. User   _##  hereby grants a royalty-free license to any and all derivatives based  _##  upon this software code base.   _##    _##  Stuttgart, Germany, Sun Jan 15 23:12:08 CET 2006   _##    _##########################################################################*/#ifndef _log_h_#define _log_h_#include <snmp_pp/config_snmp_pp.h>#include <snmp_pp/reentrant.h>#ifndef WIN32#include <sys/types.h>#endif#include <stdio.h>#include <string.h>#ifdef SNMP_PP_NAMESPACEnamespace Snmp_pp {#endif// Log entry class#define ERROR_LOG	0x10#define WARNING_LOG	0x20#define EVENT_LOG	0x30#define INFO_LOG	0x40#define DEBUG_LOG	0x50#define LOG_TYPES       5#ifdef _NO_LOGGING #define LOG_BEGIN(x)	#define LOG(x)		#define LOG_END		#else#define LOG_BEGIN(x)						\{								\	if (DefaultLog::log()->log_needed(x))			\	{							\		DefaultLog::log()->lock();			\		DefaultLog::create_log_entry(x);	#define LOG(x)		*DefaultLog::log_entry() += x#define LOG_END							\		*DefaultLog::log() += DefaultLog::log_entry();	\		DefaultLog::delete_log_entry();			\		DefaultLog::log()->unlock();			\	}							\}#endif/*--------------------------- class LogEntry --------------------------*//** * The LogEntry class represents log entries. An instance of LogEntry can * be added to a Log. Each LogEntry can be classified into the log classes * ERROR_LOG, WARNING_LOG, EVENT_LOG, INFO_LOG, and DEBUG_LOG with up to * 16 severity levels. A log entry consists of a descriptor string and * optional several string or numeric values.  * @see Log *  * @author Frank Fock * @author Marty Janzen * @version 3.5f */class DLLOPT LogEntry {public:	/**	 * Constructor with log class and severity level	 * 	 * @param t - The type of the log entry. The type is composed 	 *            by a logical OR of the log entry class with a level	 *            of 0 up to 15. 	 * @note A error log of level 0 will stop program execution!	 */  	LogEntry(unsigned char t) : type(t), count(0) {}	/**	 * Virtual destructor.	 */  	virtual ~LogEntry() {}	/**	 * Initialize a new log entry, showing timestamp, class, and level.	 */ 	virtual void init(void);	/**	 * Add a numeric value to the log entry.	 *	 * @param l - A numeric value.	 */	virtual LogEntry& operator+=(const long);	/**	 * Add a string value to the log entry.	 *	 * @param l - A numeric value.	 */	virtual LogEntry& operator+=(const char*);	/**	 * Get the contents of this log entry.         *	 * @return Current contents of this log entry.	 */ 	virtual const char* get_value(void) const { return ""; }	/**	 * Get the class of this log entry.         *	 * @return Log entry class.	 */ 	unsigned char get_class(void) const { return type & 0xF0; }	/**	 * Get the level of this log entry.         *	 * @return Log entry level.	 */ 	unsigned char get_level(void) const { return type & 0x0F; }protected:	/**	 * Add a string to the log.	 *	 * @param s - A string value.	 * @return TRUE if the value has been added and FALSE if the log	 *         entry is full.	 */	virtual bool	add_string(const char*) = 0;	/**	 * Add an integer to the log.	 *	 * @param s - An integer value.	 * @return TRUE if the value has been added and FALSE if the log	 *         entry is full.	 */	virtual bool	add_integer(long);	/**	 * Add the current time to the log.	 */	virtual bool add_timestamp(void);protected:	unsigned char  	type;	int		count;};/*------------------------- class LogEntryImpl ------------------------*/#define MAX_LOG_SIZE	2550 // increased until debugprintf is not used!/** * The LogEntryImpl class implements a log entry using a dynamically * allocated, but fixed-size buffer. * @see Log *  * @author Marty Janzen * @version 3.5f */class DLLOPT LogEntryImpl : public LogEntry {public:	/**	 * Constructor with log class and severity level	 * 	 * @param t - The type of the log entry. The type is composed 	 *            by logical or the log entry class with a level	 *            of 0 up to 15. 	 * @note A error log of level 0 will stop program execution!	 */  	LogEntryImpl(unsigned char);	/**	 * Destructor.	 */  	~LogEntryImpl();	/**	 * Get the contents of this log entry.         *	 * @return Current contents of this log entry.	 */ 	virtual const char* get_value(void) const { return value; }protected:	/**	 * Count the bytes left for additional values.	 *	 * @return The number of bytes left in this log entry.	 */  	int		bytes_left() 	    { return (int)(MAX_LOG_SIZE-(ptr-value)-1); }	/**	 * Add a string to the log.	 *	 * @param s - A string value.	 * @return TRUE if the value has been added and FALSE if the log	 *         entry is full.	 */	bool		add_string(const char*);private:        char*		value;	char*		ptr;	bool		output_stopped;};/*--------------------------- class AgentLog --------------------------*//** * The AgentLog class is an abstract base class representing a log for * information that is generated during the run time of an AGENT++ * SNMP agent.  A derived class only needs to provide appropriate * create_log_entry() and operator+= methods. * @see LogEntry * * @author Frank Fock * @version 3.5.14 */ class DLLOPT AgentLog {public:	/**	 * Default constructor.	 */ 	AgentLog();	/**	 * Virtual destructor.	 */	virtual ~AgentLog() {}	/**	 * Lock the receiver.  Default action is to perform no locking.	 */	virtual void	lock() {}	/**	 * Unlock the receiver.  Default action is to perform no locking.	 */	virtual void	unlock() {}	/**	 * Set a filter on a specified log class. Only log entries with	 * a level less or equal than the specified level will be logged.	 *	 * @param logclass - A log entry class. @see LogEntry	 * @param filter - A value between 0 and 15.	 */ 	virtual void	set_filter(int logclass, unsigned char filter);	/**	 * Gets the log level for the given log class.	 * @return	 *    a unsigned char value between 0 and 15 	 */	virtual unsigned char get_filter(int logclass) const; 	/**	 * Create a new LogEntry.	 *	 * @param t - The type of the log entry.	 * @return A new instance of LogEntry (or of a derived class).	 */	virtual LogEntry* create_log_entry(unsigned char) const = 0;	/**	 * Add a LogEntry to the receiver Log.	 *	 * @param log - A log entry.	 * @return The receiver log itself.	 */	virtual AgentLog& operator+=(const LogEntry*) = 0;	/**	 * Check whether a logging for the given type of LogEntry	 * has to be done or not.	 *	 * @param type	 *    the type of the log entry. The type is composed 	 *    by logical or the log entry class with a level	 *    of 0 up to 15.	 * @return	 *    TRUE if logging is needed, FALSE otherwise.	 */	virtual bool	log_needed(unsigned char t) 	  { return ((t & 0x0F) <= logfilter[(t / 16) - 1]); }	/**	 * Return the current time as a string.	 * 	 * @param	 *    a buffer (of at least 18 characters, for the default method)         *    into which to place a string containg the current time.         *    If no buffer is supplied, a static area is used.	 * @return	 *    a string containing the current time. Either the supplied	 *    buffer or the static area.	 */	virtual const char*	now(char* = 0);	/**	 * Return the current time as a string, using the current         * default log object.  (For backward compatibility.)	 * @note that the user is responsible for deleting the returned	 * string, using delete [].	 * 	 * @return	 *    a string containg the current time.	 */	static const char*	get_current_time();protected:	unsigned char		logfilter[LOG_TYPES];	char			static_buf[18];};/*------------------------- class AgentLogImpl ------------------------*//** * The AgentLogImpl class is an implementation of AgentLog which writes * log messages to a file, or to stdout or stderr. * @see LogEntry  * * @author Frank Fock * @version 3.5f */ class DLLOPT AgentLogImpl : public AgentLog {public:	/**	 * Default constructor, with optional pointer to an open log file.         * Log is directed to the file if given, otherwise to stdout	 *	 * @param fp - An open log file.  0 implies stdout.	 */ 	AgentLogImpl(FILE* = stdout);	/**	 * Constructor with file name of a log file. Log is directed	 * to the given file.	 *	 * @param fname - The file name of a log file.	 */ 	AgentLogImpl(const char*);	/**	 * Destructor.	 */	~AgentLogImpl();	/**	 * Set destination of logs to a given file.	 * 	 * @param fname - A file name. "" directs logs to stdout.	 */	void		set_dest(const char*);	/**	 * Set destination of logs to a given file.	 * 	 * @param fp - A pointer to an open file.  0 directs logs to stdout.	 */	void		set_dest(FILE*);	/**	 * Lock the receiver.	 */	void lock()	{#ifdef _THREADS		logLock.lock();#endif	}	/**	 * Unlock the receiver.	 */	 void unlock()	{#ifdef _THREADS		logLock.unlock();#endif	}	/**	 * Create a new LogEntry.	 *	 * @param t - The type of the log entry.	 * @return A new instance of LogEntry (or of a derived class).	 */	virtual LogEntry* create_log_entry(unsigned char) const;	/**	 * Add a LogEntry to the receiver Log.	 *	 * @param log - A log entry.	 * @return The receiver log itself.	 */	virtual AgentLog& operator+=(const LogEntry*);protected:	SnmpSynchronized	logLock;	FILE*			logfile;	bool			close_needed;};/*--------------------------- class DefaultLog --------------------------*//** * The DefaultLog class has a static Log member, that is used by the * AGENT++ API for logging. * * @version 3.5.4 * @author Frank Fock (singlton pattern -> Philippe Roger) */  class DLLOPT DefaultLog {public:	DefaultLog() { }	~DefaultLog() { }	/** 	 * Initialize the default logger with the given logging implementation.	 *	 * @param logger	 *    an AgentLog instance to be used as default logger. A previously	 *    set logger will be deleted.	 */	static void init(AgentLog* logger) 	  { if (instance) delete instance; instance = logger; }	/**	 * Return the default logger. 	 *	 * @return	 *    a pointer to an AgentLog instance.	 */	static AgentLog* log() 	  { if (!instance) init(new AgentLogImpl()); return instance; }	/**	 * Create a new log entry or reuse an existing one.	 *	 * @param type	 *    the type of the log entry as bitwise or of log class and level. 	 */	static void create_log_entry(unsigned char t)	  { if (!entry) { entry = log()->create_log_entry(t); entry->init();} }	/**	 * Return the current log entry. If there is none, an ERROR_LOG entry	 * with level 1 will be created.	 *	 * @return	 *    a pointer to a LogEntry instance.	 */	static LogEntry* log_entry() 	  { if (!entry) create_log_entry(ERROR_LOG | 1); return entry; } 	/**	 * Delete current log entry.	 */	static void delete_log_entry() 	  { if (entry) delete entry; entry = 0; }protected:	static AgentLog* instance;	static LogEntry* entry;};#ifdef SNMP_PP_NAMESPACE}#endif#endif // _log_h_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -