#include "Logger.h" #include #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(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(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); }