From 7048552d3d631ad4c911af98e050caa9ae1866d4 Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Tue, 4 Aug 2009 18:04:44 +0000 Subject: [PATCH] Log Windows event if logging fails. --- xmltooling/XMLToolingConfig.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/xmltooling/XMLToolingConfig.cpp b/xmltooling/XMLToolingConfig.cpp index 9773dcd..f154540 100644 --- a/xmltooling/XMLToolingConfig.cpp +++ b/xmltooling/XMLToolingConfig.cpp @@ -109,6 +109,22 @@ namespace xmltooling { } # endif #endif + +#ifdef WIN32 + BOOL LogEvent( + LPCSTR lpUNCServerName, + WORD wType, + DWORD dwEventID, + PSID lpUserSid, + LPCSTR message) + { + LPCSTR messages[] = {message, NULL}; + + HANDLE hElog = RegisterEventSource(lpUNCServerName, "OpenSAML XMLTooling Library"); + BOOL res = ReportEvent(hElog, wType, 0, dwEventID, lpUserSid, 1, 0, messages, NULL); + return (DeregisterEventSource(hElog) && res); + } +#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()); +#endif return false; } -- 2.1.4