Author: shuston
Date: Fri Oct 31 12:38:15 2008
New Revision: 709544

URL: http://svn.apache.org/viewvc?rev=709544&view=rev
Log:
Get initial Windows options in; event log doesn't yet work

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp?rev=709544&r1=709543&r2=709544&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp Fri Oct 
31 12:38:15 2008
@@ -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 @@
         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 @@
 
     if (logToEventLog)
         logger->output(make_auto_ptr<qpid::log::Logger::Output>
-                         (new EventLogOutput(syslogName, syslogFacility)));
+                         (new EventLogOutput(eventSource)));
 
 }
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.h?rev=709544&r1=709543&r2=709544&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/log/windows/SinkOptions.h Fri Oct 31 
12:38:15 2008
@@ -45,6 +45,7 @@
     bool logToStderr;
     bool logToStdout;
     bool logToEventLog;
+    std::string eventSource;
     std::string logFile;
 };
 


Reply via email to