LogHandler.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef LOGHANDLER_H
  14. #define LOGHANDLER_H
  15. #include "Logger.hpp"
  16. /**
  17.  * This class is the base class for all log handlers. A log handler is 
  18.  * responsible for formatting and writing log messages to a specific output.
  19.  *
  20.  * A log entry consists of three parts: a header, <body/log message and a footer.
  21.  * <pre>
  22.  * 09:17:37 2002-03-13 [MgmSrv] INFO     -- Local checkpoint 13344 started.
  23.  * </pre>
  24.  *
  25.  * Header format: TIME&DATE CATEGORY LEVEL -- 
  26.  *   TIME&DATE = ctime() format.
  27.  *   CATEGORY  = Any string.
  28.  *   LEVEL     = ALERT to DEBUG (Log levels)
  29.  *
  30.  * Footer format: n (currently only newline)
  31.  *
  32.  * @version #@ $Id: LogHandler.hpp,v 1.7 2003/09/01 10:15:53 innpeno Exp $
  33.  */
  34. class LogHandler
  35. {
  36. public:  
  37.   /**
  38.    * Default constructor.
  39.    */
  40.   LogHandler();
  41.   
  42.   /**
  43.    * Destructor.
  44.    */
  45.   virtual ~LogHandler();
  46.   /**
  47.    * Opens/initializes the log handler.
  48.    *
  49.    * @return true if successful.
  50.    */ 
  51.   virtual bool open() = 0;
  52.   /**
  53.    * Closes/free any allocated resources used by the log handler. 
  54.    *
  55.    * @return true if successful.
  56.    */ 
  57.   virtual bool close() = 0;
  58.   
  59.   /**
  60.    * Append a log message to the output stream/file whatever.
  61.    * append() will call writeHeader(), writeMessage() and writeFooter() for
  62.    * a child class and in that order. Append checks for repeated messages.
  63.    * append_impl() does not check for repeats.
  64.    *
  65.    * @param pCategory the category/name to tag the log entry with.
  66.    * @param level the log level.
  67.    * @param pMsg the log message.
  68.    */
  69.   void append(const char* pCategory, Logger::LoggerLevel level,
  70.       const char* pMsg);
  71.   void append_impl(const char* pCategory, Logger::LoggerLevel level,
  72.    const char* pMsg);
  73.   /**
  74.    * Returns a default formatted header. It currently has the
  75.    * follwing default format: '%H:%M:%S %Y-%m-%d [CATEGORY] LOGLEVEL --' 
  76.    *
  77.    * @param pStr the header string to format.
  78.    * @param pCategory a category/name to tag the log entry with.
  79.    * @param level the log level.
  80.    * @return the header.
  81.    */
  82.   const char* getDefaultHeader(char* pStr, const char* pCategory, 
  83.        Logger::LoggerLevel level) const;
  84.   
  85.   /**
  86.    * Returns a default formatted footer. Currently only returns a newline.
  87.    *
  88.    * @return the footer.
  89.    */
  90.   const char* getDefaultFooter() const;
  91.   
  92.   /**
  93.    * Returns the date and time format used by ctime().
  94.    *
  95.    * @return the date and time format.
  96.    */
  97.   const char* getDateTimeFormat() const;
  98.   /**
  99.    * Sets the date and time format. It needs to have the same arguments
  100.    * a ctime().
  101.    *
  102.    * @param pFormat  the date and time format.
  103.    */
  104.   void setDateTimeFormat(const char* pFormat);
  105.   
  106.   /**
  107.    * Returns the error code.
  108.    */
  109.   int getErrorCode() const;
  110.   /**
  111.    * Sets the error code.
  112.    *
  113.    * @param code the error code.
  114.    */
  115.   void setErrorCode(int code);
  116.   /**
  117.    * Parse logstring parameters
  118.    *
  119.    * @param params list of parameters, formatted as "param=value", 
  120.    * entries separated by ","
  121.    * @return true on success, false on failure
  122.    */ 
  123.   bool parseParams(const BaseString &params);
  124.   /**
  125.    * Sets a parameters. What parameters are accepted depends on the subclass.
  126.    *
  127.    * @param param name of parameter
  128.    * @param value value of parameter
  129.    */
  130.   virtual bool setParam(const BaseString &param, const BaseString &value) = 0;
  131.   /**
  132.    * Checks that all necessary parameters have been set.
  133.    *
  134.    * @return true if all parameters are correctly set, false otherwise
  135.    */
  136.   virtual bool checkParams();
  137. protected:
  138.   /** Max length of the date and time header in the log. */
  139.   STATIC_CONST( MAX_DATE_TIME_HEADER_LENGTH = 64 );
  140.   /** Max length of the header the log. */
  141.   STATIC_CONST( MAX_HEADER_LENGTH = 128 );
  142.   /** Max lenght of footer in the log. */
  143.   STATIC_CONST( MAX_FOOTER_LENGTH = 128 );
  144.   /**
  145.    * Write the header to the log.
  146.    * 
  147.    * @param pCategory the category to tag the log with.
  148.    * @param level the log level.
  149.    */
  150.   virtual void writeHeader(const char* category, Logger::LoggerLevel level) = 0;
  151.   /**
  152.    * Write the message to the log.
  153.    * 
  154.    * @param pMsg the message to log.
  155.    */
  156.   virtual void writeMessage(const char* pMsg) = 0;
  157.   /**
  158.    * Write the footer to the log.
  159.    * 
  160.    */
  161.   virtual void writeFooter() = 0;
  162.   
  163. private: 
  164.   /**
  165.    * Returns a string date and time string.
  166.    * @note does not update time, uses m_now as time
  167.    * @param pStr a string.
  168.    * @return a string with date and time.
  169.    */
  170.   char* getTimeAsString(char* pStr) const;
  171.   time_t m_now;
  172.   /** Prohibit */
  173.   LogHandler(const LogHandler&);
  174.   LogHandler* operator = (const LogHandler&);
  175.   bool operator == (const LogHandler&);
  176.   const char* m_pDateTimeFormat;
  177.   int m_errorCode;
  178.   // for handling repeated messages
  179.   unsigned m_count_repeated_messages;
  180.   unsigned m_max_repeat_frequency;
  181.   time_t m_last_log_time;
  182.   char m_last_category[MAX_HEADER_LENGTH];
  183.   char m_last_message[MAX_LOG_MESSAGE_SIZE];
  184.   Logger::LoggerLevel m_last_level;
  185. };
  186. #endif