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

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 _LOG_LEVEL_HPP
  14. #define _LOG_LEVEL_HPP
  15. #include <ndb_global.h>
  16. #include <mgmapi_config_parameters.h>
  17. /**
  18.  * 
  19.  */
  20. class LogLevel {
  21.   friend class Config;
  22. public:
  23.   /**
  24.    * Constructor
  25.    */
  26.   LogLevel();
  27.   
  28.   /**
  29.    * Howto add a new event category:
  30.    * 1. Add the new event category to EventCategory below
  31.    * 2. Update #define _LOGLEVEL_CATEGORIES (found below) with the number of 
  32.    *    items in EventCategory 
  33.    * 3. Update LogLevelCategoryName in LogLevel.cpp
  34.    * 4. Add the event in EventLogger
  35.    */
  36.   /**
  37.    * Copy operator
  38.    */
  39.   LogLevel & operator= (const LogLevel &);
  40.   enum EventCategory {
  41.     llInvalid = -1,
  42.     llStartUp = CFG_LOGLEVEL_STARTUP - CFG_MIN_LOGLEVEL,
  43.     llShutdown = CFG_LOGLEVEL_SHUTDOWN - CFG_MIN_LOGLEVEL,
  44.     llStatistic = CFG_LOGLEVEL_STATISTICS - CFG_MIN_LOGLEVEL,
  45.     llCheckpoint = CFG_LOGLEVEL_CHECKPOINT - CFG_MIN_LOGLEVEL,
  46.     llNodeRestart = CFG_LOGLEVEL_NODERESTART - CFG_MIN_LOGLEVEL,
  47.     llConnection = CFG_LOGLEVEL_CONNECTION - CFG_MIN_LOGLEVEL,
  48.     llInfo = CFG_LOGLEVEL_INFO - CFG_MIN_LOGLEVEL,
  49.     llWarning = CFG_LOGLEVEL_WARNING - CFG_MIN_LOGLEVEL,
  50.     llError = CFG_LOGLEVEL_ERROR - CFG_MIN_LOGLEVEL,
  51.     llGrep = CFG_LOGLEVEL_GREP - CFG_MIN_LOGLEVEL,
  52.     llDebug = CFG_LOGLEVEL_DEBUG - CFG_MIN_LOGLEVEL
  53.     ,llBackup = CFG_LOGLEVEL_BACKUP - CFG_MIN_LOGLEVEL
  54.   };
  55.   /**
  56.    * No of categories
  57.    */
  58. #define _LOGLEVEL_CATEGORIES (CFG_MAX_LOGLEVEL - CFG_MIN_LOGLEVEL + 1)
  59.   STATIC_CONST( LOGLEVEL_CATEGORIES = _LOGLEVEL_CATEGORIES );
  60.   
  61.   void clear();
  62.   
  63.   /**
  64.    * Note level is valid as 0-15
  65.    */
  66.   int setLogLevel(EventCategory ec, Uint32 level = 7);
  67.   
  68.   /**
  69.    * Get the loglevel (0-15) for a category
  70.    */
  71.   Uint32 getLogLevel(EventCategory ec) const;
  72.   
  73.   /**
  74.    * Set this= max(this, ll) per category
  75.    */
  76.   LogLevel& set_max(const LogLevel& ll);
  77.   
  78.   bool operator==(const LogLevel& l) const { 
  79.     return memcmp(this, &l, sizeof(* this)) == 0;
  80.   }
  81.   LogLevel& operator=(const struct EventSubscribeReq & req);
  82.   
  83. private:
  84.   /**
  85.    * The actual data
  86.    */
  87.   Uint8 logLevelData[LOGLEVEL_CATEGORIES];
  88. };
  89. inline
  90. LogLevel::LogLevel(){
  91.   clear();
  92. }
  93. inline
  94. LogLevel & 
  95. LogLevel::operator= (const LogLevel & org){
  96.   memcpy(logLevelData, org.logLevelData, sizeof(logLevelData));
  97.   return * this;
  98. }
  99. inline
  100. void
  101. LogLevel::clear(){
  102.   for(Uint32 i = 0; i<LOGLEVEL_CATEGORIES; i++){
  103.     logLevelData[i] = 0;
  104.   }
  105. }
  106. inline
  107. int
  108. LogLevel::setLogLevel(EventCategory ec, Uint32 level){
  109.   if (ec >= 0 && (Uint32) ec < LOGLEVEL_CATEGORIES)
  110.   {
  111.     logLevelData[ec] = (Uint8)level;
  112.     return 0;
  113.   }
  114.   return 1;
  115. }
  116. inline
  117. Uint32
  118. LogLevel::getLogLevel(EventCategory ec) const{
  119.   assert(ec >= 0 && (Uint32) ec < LOGLEVEL_CATEGORIES);
  120.   return (Uint32)logLevelData[ec];
  121. }
  122. inline
  123. LogLevel & 
  124. LogLevel::set_max(const LogLevel & org){
  125.   for(Uint32 i = 0; i<LOGLEVEL_CATEGORIES; i++){
  126.     if(logLevelData[i] < org.logLevelData[i])
  127.       logLevelData[i] = org.logLevelData[i];
  128.   }
  129.   return * this;
  130. }
  131. #include <signaldata/EventSubscribeReq.hpp>
  132. inline
  133. LogLevel&
  134. LogLevel::operator=(const EventSubscribeReq& req)
  135. {
  136.   clear();
  137.   for(size_t i = 0; i<req.noOfEntries; i++){
  138.     logLevelData[(req.theData[i] >> 16)] = req.theData[i] & 0xFFFF;
  139.   }
  140.   return * this;
  141. }
  142. #endif