? log4cxx_0_9_7.patch Index: include/log4cxx/nt/nteventlogappender.h =================================================================== RCS file: /home/cvspublic/logging-log4cxx/include/log4cxx/nt/nteventlogappender.h,v retrieving revision 1.10 diff -u -r1.10 nteventlogappender.h --- include/log4cxx/nt/nteventlogappender.h 24 Apr 2004 06:55:02 -0000 1.10 +++ include/log4cxx/nt/nteventlogappender.h 23 Feb 2005 23:23:11 -0000 @@ -87,6 +87,7 @@ * Add this source with appropriate configuration keys to the registry. */ void addRegistryInfo(); + const String* getErrorString(LPTSTR lpszFunction); // Data String server; Index: src/nteventlogappender.cpp =================================================================== RCS file: /home/cvspublic/logging-log4cxx/src/nteventlogappender.cpp,v retrieving revision 1.7 diff -u -r1.7 nteventlogappender.cpp --- src/nteventlogappender.cpp 22 Apr 2004 21:21:33 -0000 1.7 +++ src/nteventlogappender.cpp 23 Feb 2005 17:24:14 -0000 @@ -158,7 +158,12 @@ addRegistryInfo(); - hEventLog = ::RegisterEventSource(server.c_str(), source.c_str()); + hEventLog = ::RegisterEventSource( (server.empty() ? NULL : server.c_str()), source.c_str()); + if (hEventLog == NULL) + { + LogLog::error(_T("Cannot register NT EventLog -- server: '")+server+_T("' source: '")+source+_T("'")); + LogLog::error(getErrorString(_T("RegisterEventSource"))->c_str()); + } } void NTEventLogAppender::append(const LoggingEventPtr& event) @@ -187,8 +192,8 @@ if (!bSuccess) { - DWORD dwError = ::GetLastError(); LogLog::error(_T("Cannot report event in NT EventLog.")); + LogLog::error(getErrorString(_T("RegisterEventSource"))->c_str()); } } @@ -284,4 +289,28 @@ return ret_val; } +const String* NTEventLogAppender::getErrorString(LPTSTR lpszFunction) +{ + TCHAR szBuf[80]; + LPVOID lpMsgBuf; + DWORD dw = GetLastError(); + + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, NULL ); + + wsprintf(szBuf, + "%s failed with error %d: %s", + lpszFunction, dw, lpMsgBuf); + + LocalFree(lpMsgBuf); + + return new String(szBuf); +} + #endif // WIN32