summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2008-10-31 19:38:15 +0000
committerStephen D. Huston <shuston@apache.org>2008-10-31 19:38:15 +0000
commit9a86f517ca30704fe6e1f71b80181e2d16fc95b1 (patch)
treeafc259ee887efa4a9174b2aed56c2e78e428b229 /qpid/cpp/src
parenta5049238140656ad5fbf2ada920b65b507b327d6 (diff)
downloadqpid-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.cpp51
-rw-r--r--qpid/cpp/src/qpid/log/windows/SinkOptions.h1
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;
};