156 lines
5.4 KiB
C++
156 lines
5.4 KiB
C++
#include "Logger.h"
|
|
#include <iostream>
|
|
|
|
#define MAX_LOG_FILE_SIZE_CHARACTERS 32
|
|
#define MAX_LOG_FILE_MAX_FILES_CHARACTERS 32
|
|
#define LS_ARGC 14
|
|
|
|
ACE_TCHAR * LOG_FILE_USE_INDICATOR = "-f";
|
|
ACE_TCHAR * LOG_FILE_NAME_INDICATOR = "-s";
|
|
ACE_TCHAR * LOG_FILE_INTERVAL_INDICATOR = "-i";
|
|
ACE_TCHAR * LOG_FILE_MAX_SIZE_INDICATOR = "-m";
|
|
ACE_TCHAR * LOG_FILE_MAX_FILES_INDICATOR = "-N";
|
|
ACE_TCHAR * PROGRAM_NAME_INDICATOR = "-n";
|
|
ACE_TCHAR * PROGRAM_NAME = "MPS";
|
|
ACE_TCHAR * LOG_FILE_TRACE_LEVELS_INDICATOR = "-p";
|
|
|
|
u_long Logger::priorities (const ACE_TCHAR * priority_string_const)
|
|
{
|
|
u_long priority_mask = 0;
|
|
|
|
ACE_TCHAR *strtokp;
|
|
|
|
ACE_TCHAR * priority_string = ACE_OS::strdup(priority_string_const);
|
|
|
|
// Parse string and alternate priority mask.
|
|
|
|
for (ACE_TCHAR *priority = ACE_OS::strtok_r (priority_string,
|
|
ACE_TEXT ("|"),
|
|
&strtokp);
|
|
priority != 0;
|
|
priority = ACE_OS::strtok_r (0, ACE_TEXT ("|"), &strtokp))
|
|
{
|
|
if (ACE_OS::strcmp (priority, ACE_TEXT ("SHUTDOWN")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_SHUTDOWN);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~SHUTDOWN")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_SHUTDOWN);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("TRACE")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_TRACE);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~TRACE")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_TRACE);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("DEBUG")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_DEBUG);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~DEBUG")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_DEBUG);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("INFO")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_INFO);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~INFO")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_INFO);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("NOTICE")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_NOTICE);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~NOTICE")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_NOTICE);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("WARNING")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_WARNING);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~WARNING")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_WARNING);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("STARTUP")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_STARTUP);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~STARTUP")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_STARTUP);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("ERROR")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_ERROR);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~ERROR")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_ERROR);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("CRITICAL")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_CRITICAL);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~CRITICAL")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_CRITICAL);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("ALERT")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_ALERT);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~ALERT")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_ALERT);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("EMERGENCY")) == 0)
|
|
ACE_SET_BITS (priority_mask, LM_EMERGENCY);
|
|
else if (ACE_OS::strcmp (priority, ACE_TEXT ("~EMERGENCY")) == 0)
|
|
ACE_CLR_BITS (priority_mask, LM_EMERGENCY);
|
|
}
|
|
|
|
free(priority_string);
|
|
|
|
return priority_mask;
|
|
}
|
|
|
|
STATUS Logger::init(const char * logFileName)
|
|
{
|
|
STATUS status = STATUS_FAILURE;
|
|
|
|
ACE_TCHAR * ls_argv[LS_ARGC];
|
|
ls_argv[0] = LOG_FILE_USE_INDICATOR; // Use log file (OSTREAM)
|
|
ACE_TCHAR ostream_str[] = "OSTREAM\0";
|
|
ls_argv[1] = ostream_str;
|
|
ls_argv[2] = LOG_FILE_NAME_INDICATOR; // Log file name
|
|
ls_argv[3] = const_cast<char*>(logFileName);
|
|
ls_argv[4] = LOG_FILE_INTERVAL_INDICATOR; // The interval (seconds) at which the log file size is sampled
|
|
ls_argv[5] = LOG_FILE_SIZE_SAMPLE_INTERVAL;
|
|
ls_argv[6] = LOG_FILE_MAX_SIZE_INDICATOR; // Maximum log file size
|
|
|
|
ACE_TCHAR logFileSize[MAX_LOG_FILE_SIZE_CHARACTERS];
|
|
ACE_OS::memset(logFileSize, '\0', MAX_LOG_FILE_SIZE_CHARACTERS);
|
|
const unsigned int* logFileSizePtr = getLogFileSize();
|
|
if (logFileSizePtr == NULL)
|
|
{
|
|
ACE_OS::sprintf(logFileSize, "%d", 0);
|
|
}
|
|
else
|
|
{
|
|
ACE_OS::sprintf(logFileSize, "%d", *logFileSizePtr);
|
|
}
|
|
ls_argv[7] = logFileSize;
|
|
|
|
ls_argv[8] = PROGRAM_NAME_INDICATOR; // Program name
|
|
ls_argv[9] = PROGRAM_NAME;
|
|
// The maximum number of logfiles that we want created.
|
|
ls_argv[10] = LOG_FILE_MAX_FILES_INDICATOR;
|
|
ACE_TCHAR logFileMaxFiles[MAX_LOG_FILE_MAX_FILES_CHARACTERS];
|
|
ACE_OS::memset(logFileMaxFiles, '\0', MAX_LOG_FILE_MAX_FILES_CHARACTERS);
|
|
const unsigned int* logFileMaxFilesPtr = getLogFileMaxFiles();
|
|
if (logFileMaxFilesPtr == NULL)
|
|
{
|
|
ACE_OS::sprintf(logFileMaxFiles, "%d", 0);
|
|
}
|
|
else
|
|
{
|
|
ACE_OS::sprintf(logFileMaxFiles, "%d", *logFileMaxFilesPtr);
|
|
}
|
|
ls_argv[11]= logFileMaxFiles;
|
|
|
|
ls_argv[12]= LOG_FILE_TRACE_LEVELS_INDICATOR; // Trace levels
|
|
const ACE_TString* traceLevelPtr = getTraceLevel();
|
|
if (traceLevelPtr == NULL)
|
|
{
|
|
ls_argv[13] = NULL;
|
|
}
|
|
else
|
|
{
|
|
ls_argv[13]= const_cast<char*>(traceLevelPtr->c_str());
|
|
}
|
|
|
|
if (_logging_strategy.init(LS_ARGC, ls_argv) == STATUS_FAILURE)
|
|
{
|
|
ACE_ERROR_RETURN((LM_ERROR, "Error initializing the Logger.\n"), STATUS_FAILURE);
|
|
}
|
|
|
|
_init = true;
|
|
|
|
status = STATUS_SUCCESS;
|
|
return status;
|
|
}
|
|
|
|
void Logger::close()
|
|
{
|
|
_logging_strategy.fini();
|
|
|
|
// close the ostream
|
|
ACE_LOG_MSG->msg_ostream(&std::cerr, true);
|
|
} |