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

📄 logger.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
字号:
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program 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 General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <ndb_global.h>#include "Logger.hpp"#include <LogHandler.hpp>#include <ConsoleLogHandler.hpp>#include <FileLogHandler.hpp>#include "LogHandlerList.hpp"#if !defined NDB_OSE || !defined NDB_SOFTOSE || !defined NDB_WIN32#include <SysLogHandler.hpp>#endif//// PUBLIC//const char* Logger::LoggerLevelNames[] = { "ON      ", 					   "DEBUG   ",					   "INFO    ",					   "WARNING ",					   "ERROR   ",					   "CRITICAL",					   "ALERT   ",					   "ALL     "					 };Logger::Logger() :   m_pCategory("Logger"),  m_pConsoleHandler(NULL),  m_pFileHandler(NULL),  m_pSyslogHandler(NULL){  m_pHandlerList = new LogHandlerList();  disable(LL_ALL);  enable(LL_ON);  enable(LL_INFO);}Logger::~Logger(){  removeAllHandlers();    delete m_pHandlerList;}void Logger::setCategory(const char* pCategory){  m_pCategory = pCategory;}boolLogger::createConsoleHandler(){  bool rc = true;  if (m_pConsoleHandler == NULL)  {    m_pConsoleHandler = new ConsoleLogHandler();     if (!addHandler(m_pConsoleHandler)) // TODO: check error code    {      rc = false;      delete m_pConsoleHandler;      m_pConsoleHandler = NULL;    }  }  return rc;}void Logger::removeConsoleHandler(){  if (removeHandler(m_pConsoleHandler))  {    m_pConsoleHandler = NULL;  }}boolLogger::createFileHandler(){  bool rc = true;  if (m_pFileHandler == NULL)  {    m_pFileHandler = new FileLogHandler();     if (!addHandler(m_pFileHandler)) // TODO: check error code    {      rc = false;      delete m_pFileHandler;      m_pFileHandler = NULL;    }  }  return rc;}void Logger::removeFileHandler(){  if (removeHandler(m_pFileHandler))  {    m_pFileHandler = NULL;  }}boolLogger::createSyslogHandler(){  bool rc = true;  if (m_pSyslogHandler == NULL)  {#if defined NDB_OSE || defined NDB_SOFTOSE || defined NDB_WIN32    m_pSyslogHandler = new ConsoleLogHandler(); #else    m_pSyslogHandler = new SysLogHandler(); #endif    if (!addHandler(m_pSyslogHandler)) // TODO: check error code    {      rc = false;      delete m_pSyslogHandler;      m_pSyslogHandler = NULL;    }  }  return rc;}void Logger::removeSyslogHandler(){  if (removeHandler(m_pSyslogHandler))  {    m_pSyslogHandler = NULL;  }}boolLogger::addHandler(LogHandler* pHandler){  assert(pHandler != NULL);  bool rc = pHandler->open();	  if (rc)  {    m_pHandlerList->add(pHandler);  }  else  {    delete pHandler;  }	  return rc;}boolLogger::addHandler(const BaseString &logstring, int *err, int len, char* errStr) {  size_t i;  Vector<BaseString> logdest;  Vector<LogHandler *>loghandlers;  DBUG_ENTER("Logger::addHandler");  logstring.split(logdest, ";");  for(i = 0; i < logdest.size(); i++) {    DBUG_PRINT("info",("adding: %s",logdest[i].c_str()));    Vector<BaseString> v_type_args;    logdest[i].split(v_type_args, ":", 2);    BaseString type(v_type_args[0]);    BaseString params;    if(v_type_args.size() >= 2)      params = v_type_args[1];    LogHandler *handler = NULL;#ifndef NDB_WIN32    if(type == "SYSLOG")    {      handler = new SysLogHandler();    } else #endif    if(type == "FILE")      handler = new FileLogHandler();    else if(type == "CONSOLE")      handler = new ConsoleLogHandler();        if(handler == NULL)    {      snprintf(errStr,len,"Could not create log destination: %s",               logdest[i].c_str());      DBUG_RETURN(false);    }    if(!handler->parseParams(params))    {      *err= handler->getErrorCode();      if(handler->getErrorStr())        strncpy(errStr, handler->getErrorStr(), len);      DBUG_RETURN(false);    }    loghandlers.push_back(handler);  }    for(i = 0; i < loghandlers.size(); i++)    addHandler(loghandlers[i]);    DBUG_RETURN(true); /* @todo handle errors */}boolLogger::removeHandler(LogHandler* pHandler){  int rc = false;  if (pHandler != NULL)  {    rc = m_pHandlerList->remove(pHandler);  }  return rc;}voidLogger::removeAllHandlers(){  m_pHandlerList->removeAll();}boolLogger::isEnable(LoggerLevel logLevel) const{  if (logLevel == LL_ALL)  {    for (unsigned i = 1; i < MAX_LOG_LEVELS; i++)      if (!m_logLevels[i])	return false;    return true;  }  return m_logLevels[logLevel];}voidLogger::enable(LoggerLevel logLevel){  if (logLevel == LL_ALL)  {    for (unsigned i = 0; i < MAX_LOG_LEVELS; i++)    {      m_logLevels[i] = true;    }  }  else   {    m_logLevels[logLevel] = true;  }}void Logger::enable(LoggerLevel fromLogLevel, LoggerLevel toLogLevel){  if (fromLogLevel > toLogLevel)  {    LoggerLevel tmp = toLogLevel;    toLogLevel = fromLogLevel;    fromLogLevel = tmp;  }  for (int i = fromLogLevel; i <= toLogLevel; i++)  {    m_logLevels[i] = true;  } }voidLogger::disable(LoggerLevel logLevel){  if (logLevel == LL_ALL)  {    for (unsigned i = 0; i < MAX_LOG_LEVELS; i++)    {      m_logLevels[i] = false;    }  }  else  {    m_logLevels[logLevel] = false;  }}void Logger::alert(const char* pMsg, ...) const{  va_list ap;  va_start(ap, pMsg);  log(LL_ALERT, pMsg, ap);  va_end(ap);}void Logger::critical(const char* pMsg, ...) const{  va_list ap;  va_start(ap, pMsg);  log(LL_CRITICAL, pMsg, ap);    va_end(ap);}void Logger::error(const char* pMsg, ...) const{  va_list ap;  va_start(ap, pMsg);  log(LL_ERROR, pMsg, ap);    va_end(ap);}void Logger::warning(const char* pMsg, ...) const{  va_list ap;  va_start(ap, pMsg);  log(LL_WARNING, pMsg, ap);  va_end(ap);}void Logger::info(const char* pMsg, ...) const{  va_list ap;  va_start(ap, pMsg);  log(LL_INFO, pMsg, ap);  va_end(ap);}void Logger::debug(const char* pMsg, ...) const{  va_list ap;  va_start(ap, pMsg);  log(LL_DEBUG, pMsg, ap);  va_end(ap);}//// PROTECTED//void Logger::log(LoggerLevel logLevel, const char* pMsg, va_list ap) const{  if (m_logLevels[LL_ON] && m_logLevels[logLevel])  {    char buf[MAX_LOG_MESSAGE_SIZE];    BaseString::vsnprintf(buf, sizeof(buf), pMsg, ap);    LogHandler* pHandler = NULL;    while ( (pHandler = m_pHandlerList->next()) != NULL)    {      pHandler->append(m_pCategory, logLevel, buf);    }  }}//// PRIVATE//template class Vector<LogHandler*>;

⌨️ 快捷键说明

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