Log Windows event if logging fails.
authorcantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Tue, 4 Aug 2009 18:04:44 +0000 (18:04 +0000)
committercantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Tue, 4 Aug 2009 18:04:44 +0000 (18:04 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/branches/REL_1@609 de75baf8-a10c-0410-a50a-987c0e22f00f

xmltooling/XMLToolingConfig.cpp

index 9773dcd..f154540 100644 (file)
@@ -109,6 +109,22 @@ namespace xmltooling {
     }
 # endif
 #endif
+
+#ifdef WIN32
+    BOOL LogEvent(\r
+        LPCSTR  lpUNCServerName,\r
+        WORD  wType,\r
+        DWORD  dwEventID,\r
+        PSID  lpUserSid,\r
+        LPCSTR  message)\r
+    {\r
+        LPCSTR  messages[] = {message, NULL};\r
+\r
+        HANDLE hElog = RegisterEventSource(lpUNCServerName, "OpenSAML XMLTooling Library");\r
+        BOOL res = ReportEvent(hElog, wType, 0, dwEventID, lpUserSid, 1, 0, messages, NULL);\r
+        return (DeregisterEventSource(hElog) && res);\r
+    }\r
+#endif
 }
 
 XMLToolingConfig& XMLToolingConfig::getConfig()
@@ -176,7 +192,11 @@ bool XMLToolingInternalConfig::log_config(const char* config)
         }
     }
     catch (const ConfigureFailure& e) {
-        Category::getInstance(XMLTOOLING_LOGCAT".Logging").crit("failed to initialize log4cpp: %s", e.what());
+        string msg = string("failed to configure logging: ") + e.what();
+        Category::getInstance(XMLTOOLING_LOGCAT".Logging").crit(msg);
+#ifdef WIN32
+        LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, msg.c_str());\r
+#endif
         return false;
     }