diff options
author | Stephen D. Huston <shuston@apache.org> | 2008-10-31 19:38:15 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2008-10-31 19:38:15 +0000 |
commit | 9a86f517ca30704fe6e1f71b80181e2d16fc95b1 (patch) | |
tree | afc259ee887efa4a9174b2aed56c2e78e428b229 /qpid/cpp/src | |
parent | a5049238140656ad5fbf2ada920b65b507b327d6 (diff) | |
download | qpid-python-9a86f517ca30704fe6e1f71b80181e2d16fc95b1.tar.gz |
Get initial Windows options in; event log doesn't yet work
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@709544 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r-- | qpid/cpp/src/qpid/log/windows/SinkOptions.cpp | 51 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/log/windows/SinkOptions.h | 1 |
2 files changed, 43 insertions, 9 deletions
diff --git a/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp b/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp index 6bd74e5bdc..cfcb965464 100644 --- a/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp +++ b/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp @@ -26,42 +26,76 @@ #include <map> #include <string> -using std::string; +#include <windows.h> + using qpid::Exception; namespace qpid { namespace log { namespace windows { +namespace { + +// 'eventTypes' maps qpid log levels to Windows event types. They are in +// order of qpid log levels and must map to: +// "trace", "debug", "info", "notice", "warning", "error", "critical" +static int eventTypes[qpid::log::LevelTraits::COUNT] = { + EVENTLOG_INFORMATION_TYPE, /* trace */ + EVENTLOG_INFORMATION_TYPE, /* debug */ + EVENTLOG_INFORMATION_TYPE, /* info */ + EVENTLOG_INFORMATION_TYPE, /* notice */ + EVENTLOG_WARNING_TYPE, /* warning */ + EVENTLOG_ERROR_TYPE, /* error */ + EVENTLOG_ERROR_TYPE /* critical */ +}; + +} // namespace + class EventLogOutput : public qpid::log::Logger::Output { public: - EventLogOutput(const std::string& logName) + EventLogOutput(const std::string& sourceName) : logHandle(0) { + logHandle = OpenEventLog(0, "Application"); } virtual ~EventLogOutput() { + if (logHandle) + CloseEventLog(logHandle); } virtual void log(const Statement& s, const std::string& m) { + if (logHandle) { + const char *msg = m.c_str(); + ReportEvent(logHandle, + eventTypes[s.level], + 0, /* category unused */ + 0, /* event id */ + 0, /* user security id */ + 1, /* number of strings */ + 0, /* no event-specific data */ + &msg, + 0); + } } -private: +private: + HANDLE logHandle; }; SinkOptions::SinkOptions(const std::string& argv0) : qpid::log::SinkOptions(), logToStderr(true), logToStdout(false), - logToEventLog(false) + logToEventLog(false), + eventSource("Application") { addOptions() ("log-to-stderr", optValue(logToStderr, "yes|no"), "Send logging output to stderr") ("log-to-stdout", optValue(logToStdout, "yes|no"), "Send logging output to stdout") ("log-to-file", optValue(logFile, "FILE"), "Send log output to FILE.") ("log-to-eventlog", optValue(logToEventLog, "yes|no"), "Send logging output to event log;\n\tcustomize using --syslog-name and --syslog-facility") - ("syslog-name", optValue(syslogName, "NAME"), "Name to use in syslog messages") - ("syslog-facility", optValue(syslogFacility,"LOG_XXX"), "Facility to use in syslog messages") + ("eventlog-source-name", optValue(eventSource, "Application"), "Event source to log to") ; } @@ -72,9 +106,8 @@ qpid::log::SinkOptions& SinkOptions::operator=(const qpid::log::SinkOptions& rhs logToStderr = prhs->logToStderr; logToStdout = prhs->logToStdout; logToEventLog = prhs->logToEventLog; + eventSource = prhs->eventSource; logFile = prhs->logFile; - syslogName = prhs->syslogName; - syslogFacility.value = prhs->syslogFacility.value; } return *this; } @@ -102,7 +135,7 @@ void SinkOptions::setup(qpid::log::Logger *logger) { if (logToEventLog) logger->output(make_auto_ptr<qpid::log::Logger::Output> - (new EventLogOutput(syslogName, syslogFacility))); + (new EventLogOutput(eventSource))); } diff --git a/qpid/cpp/src/qpid/log/windows/SinkOptions.h b/qpid/cpp/src/qpid/log/windows/SinkOptions.h index ba9d53ad49..d14e9352be 100644 --- a/qpid/cpp/src/qpid/log/windows/SinkOptions.h +++ b/qpid/cpp/src/qpid/log/windows/SinkOptions.h @@ -45,6 +45,7 @@ struct SinkOptions : public qpid::log::SinkOptions { bool logToStderr; bool logToStdout; bool logToEventLog; + std::string eventSource; std::string logFile; }; |