📄 ltklogger.cpp
字号:
/*****************************************************************************************
* Copyright (c) 2007 Hewlett-Packard Development Company, L.P.
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*****************************************************************************************/
/************************************************************************
* SVN MACROS
*
* $LastChangedDate: 2008-01-10 14:36:54 +0530 (Thu, 10 Jan 2008) $
* $Revision: 353 $
* $Author: charakan $
*
************************************************************************/
/************************************************************************
* FILE DESCR: Implementation of the Debug Logging Module
*
* CONTENTS:
*
* AUTHOR: Balaji R.
*
* DATE: December 23, 2004
* CHANGE HISTORY:
* Author Date Description of change
************************************************************************/
#include "LTKLogger.h"
#include "LTKMacros.h"
#include "LTKErrorsList.h"
#include "LTKOSUtil.h"
#include "LTKOSUtilFactory.h"
LTKLoggerInterface* LTKLogger::loggerInstance = NULL;
/**********************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : LTKLogger
* DESCRIPTION : Default Constructor
* ARGUMENTS :
* RETURNS :
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*************************************************************************************/
LTKLogger::LTKLogger():
m_debugLevel(LTKLogger::LTK_LOGLEVEL_ERR),
m_logFileName(DEFAULT_LOG_FILE),
m_logStatus(INACTIVE),
m_isTimeStamped(true)
{
}
/**********************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : LTKLogger
* DESCRIPTION : destructor
* ARGUMENTS :
* RETURNS :
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*************************************************************************************/
LTKLogger::~LTKLogger()
{
stopLog();
}
/**********************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : operator()
* DESCRIPTION : overloaded function call operator
* ARGUMENTS : msgDebugLevel - log level of the messages to be logged
* RETURNS : reference to an output stream object
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*************************************************************************************/
ostream& LTKLogger::operator()(const EDebugLevel& msgDebugLevel,
const string& fileName,
int lineNumber)
{
if ( m_debugLevel <= msgDebugLevel )
{
writeAuxInfo(fileName, lineNumber);
switch ( msgDebugLevel )
{
case LTKLogger::LTK_LOGLEVEL_ALL:
m_logFile << "[All] ";
break;
case LTKLogger::LTK_LOGLEVEL_VERBOSE:
m_logFile << "[Verbose] ";
break;
case LTKLogger::LTK_LOGLEVEL_DEBUG:
m_logFile << "[Debug] ";
break;
case LTKLogger::LTK_LOGLEVEL_INFO:
m_logFile << "[Info] ";
break;
case LTKLogger::LTK_LOGLEVEL_ERR:
m_logFile << "[Error] ";
break;
}
m_logFile.flush();
return m_logFile;
}
// if m_debugLevel is higher than the message importance,
// then don't attempt to process it's input
return m_ofstream;
}
/**********************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : writeAuxInfo
* DESCRIPTION : writes the data, time, file, line no. information into the log file
* ARGUMENTS : fileName - name of file containing the log message
* lineNumber - line number of the log message
* RETURNS : SUCCESS on successful writing of the auxiliary information
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*************************************************************************************/
int LTKLogger::writeAuxInfo(const string& fileName, int lineNumber)
{
#ifdef LOGGEROFF
return FAILURE;
#endif
if(m_isTimeStamped)
{
LTKOSUtil *pOSUtil = LTKOSUtilFactory::getInstance() ;
string formattedTimeStr ;
pOSUtil->getSystemTimeString(formattedTimeStr) ;
m_logFile << formattedTimeStr << ' ';
delete pOSUtil ;
/*
time_t rawtime;
time(&rawtime);
string timeStr = ctime(&rawtime);
string formattedTimeStr = timeStr.substr(0, 24);
m_logFile << formattedTimeStr << ' ';
*/
}
m_logFile << fileName.substr(fileName.find_last_of(SEPARATOR) + 1, fileName.size());
if(lineNumber != 0)
{
m_logFile << '(' << lineNumber << "): ";
}
return SUCCESS;
}
/***************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : setLogLevel
* DESCRIPTION : sets the level of the messages to be logged
* ARGUMENTS : debugLevel - level of the messages to be logged
* RETURNS : SUCCESS on successful set operation
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
****************************************************************************/
int LTKLogger::setLogLevel(const EDebugLevel& debugLevel)
{
#ifdef LOGGEROFF
return FAILURE;
#endif
m_debugLevel = debugLevel;
return SUCCESS;
}
/****************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : setLogFileName
* DESCRIPTION : sets the name of the file to be used for logging
* ARGUMENTS : logFileName - name of the file to be used for logging
* RETURNS : Nothing
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*****************************************************************************/
void LTKLogger::setLogFileName(const string& logFileName)
{
#ifdef LOGGEROFF
return;
#endif
if(m_logStatus == INACTIVE)
{
m_logFileName = logFileName;
}
}
/**********************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : getLogLevel
* DESCRIPTION : returns the log of messages to be logged
* ARGUMENTS :
* RETURNS : log of messages to be logged
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*************************************************************************************/
LTKLogger::EDebugLevel LTKLogger::getLogLevel()
{
#ifdef LOGGEROFF
return string("Logger is off");
#endif
return m_debugLevel;
}
/*****************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : getLogFileName
* DESCRIPTION : returns the name of the log file
* ARGUMENTS :
* RETURNS : name of the log file
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
******************************************************************************/
const string& LTKLogger::getLogFileName()
{
return m_logFileName;
}
/****************************************************************************
* AUTHOR : Balaji R.
* DATE : 23-DEC-2004
* NAME : startLog
* DESCRIPTION : starts the logging operation
* ARGUMENTS :
* RETURNS : SUCCESS on successful start of logging
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
****************************************************************************/
int LTKLogger::startLog(bool isTimeStamped)
{
if (m_debugLevel == LTK_LOGLEVEL_OFF )
return FAILURE;
if(m_logStatus == INACTIVE)
{
m_isTimeStamped = isTimeStamped;
if(m_logFileName != "")
{
m_logFile.close();
m_logFile.clear();
m_logFile.open(m_logFileName.c_str(), ios::app);
}
if(m_logFileName == "" || !m_logFile)
{
// log the non-existance of m_logFileName file path is unable to open m_logFileName
return (ELOG_FILE_NOT_EXIST);
m_logFile.close();
m_logFile.clear();
m_logFile.open(m_logFileName.c_str(), ios::app);
}
m_logStatus = ACTIVE;
}
return SUCCESS;
}
/****************************************************************************
* AUTHOR : Nidhi sharma
* DATE : 12-SEPT-2005
* NAME : getInstance
* DESCRIPTION : This file will return the address of the Logger instance.
* ARGUMENTS :
* RETURNS : Address of the Logger instance.
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
* Thanigai 28-NOV-05 returning the address of global Logger object
* is giving runtime error, because the vfptr is not
* getting initialized(vtable). So implementing the
* workaround by allocating a new Logger object runtime.
*****************************************************************************/
LTKLoggerInterface* LTKLogger::getInstance()
{
if(loggerInstance == NULL)
{
loggerInstance = new LTKLogger();
}
return loggerInstance;
}
/****************************************************************************
* AUTHOR : Nidhi sharma
* DATE : 12-SEPT-2005
* NAME : destroyLoggerInstance
* DESCRIPTION :
* ARGUMENTS :
* RETURNS :
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*****************************************************************************/
void LTKLogger::destroyLoggerInstance()
{
if (loggerInstance != NULL)
{
delete loggerInstance;
loggerInstance = NULL;
}
}
/****************************************************************************
* AUTHOR : Thanigai
* DATE : 12-SEPT-2005
* NAME : stopLog
* DESCRIPTION : stops the logging operation
* ARGUMENTS :
* RETURNS : SUCCESS on successful stop of logging
* NOTES :
* CHANGE HISTROY
* Author Date Description of change
*****************************************************************************/
int LTKLogger::stopLog()
{
if (m_debugLevel == LTK_LOGLEVEL_OFF )
return FAILURE;
if(m_logFileName != "")
{
m_logFile.close();
m_logStatus = INACTIVE;
return 0;
}
return FAILURE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -