You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rm...@apache.org on 2021/11/26 15:42:46 UTC
[logging-log4cxx] branch LOGCXX-510 updated: Make sure that NTEventLogAppender is ABI stable
This is an automated email from the ASF dual-hosted git repository.
rmiddleton pushed a commit to branch LOGCXX-510
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/LOGCXX-510 by this push:
new 61a71ec Make sure that NTEventLogAppender is ABI stable
61a71ec is described below
commit 61a71ecf9b3a9b507a580b9bd6fa1e83f466699a
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 26 10:42:37 2021 -0500
Make sure that NTEventLogAppender is ABI stable
---
src/main/cpp/nteventlogappender.cpp | 107 +++++++++++++++++------
src/main/cpp/timebasedrollingpolicy.cpp | 1 -
src/main/include/log4cxx/nt/nteventlogappender.h | 37 ++------
3 files changed, 87 insertions(+), 58 deletions(-)
diff --git a/src/main/cpp/nteventlogappender.cpp b/src/main/cpp/nteventlogappender.cpp
index 6ac9da2..91aee58 100644
--- a/src/main/cpp/nteventlogappender.cpp
+++ b/src/main/cpp/nteventlogappender.cpp
@@ -33,6 +33,26 @@ using namespace log4cxx::spi;
using namespace log4cxx::helpers;
using namespace log4cxx::nt;
+#define priv static_cast<NTEventLogAppenderPrivate*>(m_priv.get())
+
+struct NTEventLogAppender::NTEventLogAppenderPrivate : public AppenderSkeleton::AppenderSkeletonPrivate {
+ NTEventLogAppenderPrivate() :
+ hEventLog(nullptr),
+ pCurrentUserSID(nullptr) {}
+
+ NTEventLogAppenderPrivate( LayoutPtr layout ) :
+ AppenderSkeletonPrivate(layout),
+ hEventLog(nullptr),
+ pCurrentUserSID(nullptr) {}
+
+ // Data
+ LogString server;
+ LogString log;
+ LogString source;
+ HANDLE hEventLog;
+ SID* pCurrentUserSID;
+};
+
class CCtUserSIDHelper
{
public:
@@ -91,15 +111,18 @@ class CCtUserSIDHelper
IMPLEMENT_LOG4CXX_OBJECT(NTEventLogAppender)
-NTEventLogAppender::NTEventLogAppender() : hEventLog(NULL), pCurrentUserSID(NULL)
+NTEventLogAppender::NTEventLogAppender() :
+ AppenderSkeleton(std::make_unique<NTEventLogAppenderPrivate>())
{
}
NTEventLogAppender::NTEventLogAppender(const LogString& server, const LogString& log, const LogString& source, const LayoutPtr& layout)
- : AppenderSkeleton(std::make_unique<AppenderSkeletonPrivate>(layout)),
- server(server), log(log), source(source), hEventLog(NULL), pCurrentUserSID(NULL)
+ : AppenderSkeleton(std::make_unique<NTEventLogAppenderPrivate>(layout))
{
Pool pool;
+ priv->server = server;
+ priv->log = log;
+ priv->source = source;
activateOptions(pool);
}
@@ -111,16 +134,16 @@ NTEventLogAppender::~NTEventLogAppender()
void NTEventLogAppender::close()
{
- if (hEventLog != NULL)
+ if (priv->hEventLog != NULL)
{
- ::DeregisterEventSource(hEventLog);
- hEventLog = NULL;
+ ::DeregisterEventSource(priv->hEventLog);
+ priv->hEventLog = NULL;
}
- if (pCurrentUserSID != NULL)
+ if (priv->pCurrentUserSID != NULL)
{
- CCtUserSIDHelper::FreeSid((::SID*) pCurrentUserSID);
- pCurrentUserSID = NULL;
+ CCtUserSIDHelper::FreeSid((::SID*) priv->pCurrentUserSID);
+ priv->pCurrentUserSID = NULL;
}
}
@@ -128,15 +151,15 @@ void NTEventLogAppender::setOption(const LogString& option, const LogString& val
{
if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("SERVER"), LOG4CXX_STR("server")))
{
- server = value;
+ priv->server = value;
}
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("LOG"), LOG4CXX_STR("log")))
{
- log = value;
+ priv->log = value;
}
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("SOURCE"), LOG4CXX_STR("source")))
{
- source = value;
+ priv->source = value;
}
else
{
@@ -146,7 +169,7 @@ void NTEventLogAppender::setOption(const LogString& option, const LogString& val
void NTEventLogAppender::activateOptions(Pool&)
{
- if (source.empty())
+ if (priv->source.empty())
{
LogLog::warn(
((LogString) LOG4CXX_STR("Source option not set for appender ["))
@@ -154,30 +177,30 @@ void NTEventLogAppender::activateOptions(Pool&)
return;
}
- if (log.empty())
+ if (priv->log.empty())
{
- log = LOG4CXX_STR("Application");
+ priv->log = LOG4CXX_STR("Application");
}
close();
// current user security identifier
- CCtUserSIDHelper::GetCurrentUserSID((::SID**) &pCurrentUserSID);
+ CCtUserSIDHelper::GetCurrentUserSID((::SID**) &priv->pCurrentUserSID);
addRegistryInfo();
- LOG4CXX_ENCODE_WCHAR(wsource, source);
- LOG4CXX_ENCODE_WCHAR(wserver, server);
- hEventLog = ::RegisterEventSourceW(
+ LOG4CXX_ENCODE_WCHAR(wsource, priv->source);
+ LOG4CXX_ENCODE_WCHAR(wserver, priv->server);
+ priv->hEventLog = ::RegisterEventSourceW(
wserver.empty() ? NULL : wserver.c_str(),
wsource.c_str());
- if (hEventLog == NULL)
+ if (priv->hEventLog == NULL)
{
LogString msg(LOG4CXX_STR("Cannot register NT EventLog -- server: '"));
- msg.append(server);
+ msg.append(priv->server);
msg.append(LOG4CXX_STR("' source: '"));
- msg.append(source);
+ msg.append(priv->source);
LogLog::error(msg);
LogLog::error(getErrorString(LOG4CXX_STR("RegisterEventSource")));
}
@@ -185,7 +208,7 @@ void NTEventLogAppender::activateOptions(Pool&)
void NTEventLogAppender::append(const LoggingEventPtr& event, Pool& p)
{
- if (hEventLog == NULL)
+ if (priv->hEventLog == NULL)
{
LogLog::warn(LOG4CXX_STR("NT EventLog not opened."));
return;
@@ -195,11 +218,11 @@ void NTEventLogAppender::append(const LoggingEventPtr& event, Pool& p)
this->m_priv->layout->format(oss, event, p);
wchar_t* msgs = Transcoder::wencode(oss, p);
BOOL bSuccess = ::ReportEventW(
- hEventLog,
+ priv->hEventLog,
getEventType(event),
getEventCategory(event),
0x1000,
- pCurrentUserSID,
+ priv->pCurrentUserSID,
1,
0,
(LPCWSTR*) &msgs,
@@ -219,9 +242,9 @@ void NTEventLogAppender::addRegistryInfo()
DWORD disposition = 0;
::HKEY hkey = 0;
LogString subkey(LOG4CXX_STR("SYSTEM\\CurrentControlSet\\Services\\EventLog\\"));
- subkey.append(log);
+ subkey.append(priv->log);
subkey.append(1, (logchar) 0x5C /* '\\' */);
- subkey.append(source);
+ subkey.append(priv->source);
LOG4CXX_ENCODE_WCHAR(wsubkey, subkey);
long stat = RegCreateKeyExW(HKEY_LOCAL_MACHINE, wsubkey.c_str(), 0, NULL,
@@ -341,4 +364,34 @@ LogString NTEventLogAppender::getErrorString(const LogString& function)
return msg;
}
+void NTEventLogAppender::setSource(const LogString& source)
+{
+ priv->source.assign(source);
+}
+
+const LogString& NTEventLogAppender::getSource() const
+{
+ return priv->source;
+}
+
+void NTEventLogAppender::setLog(const LogString& log)
+{
+ priv->log.assign(log);
+}
+
+const LogString& NTEventLogAppender::getLog() const
+{
+ return priv->log;
+}
+
+void NTEventLogAppender::setServer(const LogString& server)
+{
+ priv->server.assign(server);
+}
+
+const LogString& NTEventLogAppender::getServer() const
+{
+ return priv->server;
+}
+
#endif // WIN32
diff --git a/src/main/cpp/timebasedrollingpolicy.cpp b/src/main/cpp/timebasedrollingpolicy.cpp
index e967da6..ef1e211 100644
--- a/src/main/cpp/timebasedrollingpolicy.cpp
+++ b/src/main/cpp/timebasedrollingpolicy.cpp
@@ -31,7 +31,6 @@
#include <log4cxx/helpers/exception.h>
#include <log4cxx/rolling/gzcompressaction.h>
#include <log4cxx/rolling/zipcompressaction.h>
-#include <log4cxx/rolling/rollingfileappenderskeleton.h>
#include<iostream>
#ifndef INT64_C
diff --git a/src/main/include/log4cxx/nt/nteventlogappender.h b/src/main/include/log4cxx/nt/nteventlogappender.h
index 5150c2e..366cce6 100644
--- a/src/main/include/log4cxx/nt/nteventlogappender.h
+++ b/src/main/include/log4cxx/nt/nteventlogappender.h
@@ -62,35 +62,17 @@ class LOG4CXX_EXPORT NTEventLogAppender : public AppenderSkeleton
return true;
}
- void setSource(const LogString& source)
- {
- this->source.assign(source);
- }
+ void setSource(const LogString& source);
- const LogString& getSource() const
- {
- return source;
- }
+ const LogString& getSource() const;
- void setLog(const LogString& log)
- {
- this->log.assign(log);
- }
+ void setLog(const LogString& log);
- const LogString& getLog() const
- {
- return log;
- }
+ const LogString& getLog() const;
- void setServer(const LogString& server)
- {
- this->server.assign(server);
- }
+ void setServer(const LogString& server);
- const LogString& getServer() const
- {
- return server;
- }
+ const LogString& getServer() const;
protected:
@@ -109,12 +91,7 @@ class LOG4CXX_EXPORT NTEventLogAppender : public AppenderSkeleton
*/
void addRegistryInfo();
- // Data
- LogString server;
- LogString log;
- LogString source;
- HANDLE hEventLog;
- SID* pCurrentUserSID;
+ struct NTEventLogAppenderPrivate;
static LogString getErrorString(const LogString& function);
private: