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);
}