Guten Tag Robert Middleton,
am Samstag, 6. November 2021 um 02:57 schrieben Sie:
> There are some notes on how this is done here:
> https://github.com/apache/logging-log4cxx/blob/LOGCXX-510/src/site/markdown/library-design.md
Great work! Is there something I should specifically look out when
testing or would it be fione to know if things run at all already?
Get a lot of warnings like this one currently:
> Schweregrad Code Beschreibung Projekt Datei Zeile
> Unterdrückungszustand
> Warnung C4251 "log4cxx::helpers::FileInputStream::m_priv": class
> "std::unique_ptr<log4cxx::helpers::FileInputStream::FileInputStreamPrivate,std::default_delete<log4cxx::helpers::FileInputStream::FileInputStreamPrivate>>"
> erfordert eine DLL-Schnittstelle, die von Clients von class
> "log4cxx::helpers::FileInputStream" verwendet wird
> C:\Users\tschoening\Documents\Svn\Src\Libs\trunk\C++\Logging\log4cxx\master\src\out\build\x64-Debug\src
>
> C:\Users\tschoening\Documents\Svn\Src\Libs\trunk\C++\Logging\log4cxx\master\src\src\main\include\log4cxx\helpers\fileinputstream.h
> 40
And some error, while I fixed some others in the attachment already:
> Schweregrad Code Beschreibung Projekt Datei Zeile
> Unterdrückungszustand
> Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol ""public:
> static class log4cxx::helpers::Class const & __cdecl
> log4cxx::rolling::RollingFileAppenderSkeleton::getStaticClass(void)"
> (?getStaticClass@RollingFileAppenderSkeleton@rolling@log4cxx@@SAAEBVClass@helpers@3@XZ)"
> in Funktion ""public: virtual void const * __cdecl
> log4cxx::rolling::RollingFileAppenderSkeleton::cast(class
> log4cxx::helpers::Class const &)const "
> (?cast@RollingFileAppenderSkeleton@rolling@log4cxx@@UEBAPEBXAEBVClass@helpers@3@@Z)".
>
> C:\Users\tschoening\Documents\Svn\Src\Libs\trunk\C++\Logging\log4cxx\master\src\out\build\x64-Debug\src
>
> C:\Users\tschoening\Documents\Svn\Src\Libs\trunk\C++\Logging\log4cxx\master\src\out\build\x64-Debug\src\timebasedrollingpolicy.cpp.obj
> 1
Is the following line correct in your docs?
> std::unique_ptr<AppenderSkeletonPrivate> m_priv;
https://github.com/apache/logging-log4cxx/blame/LOGCXX-510/src/site/markdown/library-design.md#L88
Should this be the following instead? Looks like a copy&paste error.
> std::unique_ptr<ParentPrivate> m_priv;
Some naming discussion: How about using "ParentPriv" and
"ParentPriv.h" instead of heaving "ParentPrivate", "Parent-private.h"
and "m_priv". It's shorter, "-private" doesn't follow QT conventions
anyway and the abbreviation "priv" is used already as well.
When looking at your code, you are using some "XyPriv" and "xy_priv.h"
and some "XyPrivate" and "xy_priv.h" already. For existing classes, I
suggest keeping "xy_priv.h", but for newer classes "XyPriv" and
"xyPriv.h" read better in my opinion. So I would suggest that in your
new docs.
About inheritance: Wouldn't it be better in most cases to provide
protected or public getters in base classes anyway instead of
accessing private data structs?
I understand your example to show how it could be done in case no such
getters are available or should be used for some reason. Or is that
example showing how it needs to be done always regardless how the
private data is accessed by subclasses?
> #define priv static_cast<AndFilterPrivate*>(m_priv.get())
Does it make sense to mention something like that in your new docs?
Is it possible to make it a (generic?) getter or alike instead of a
macro?
Mit freundlichen Grüßen
Thorsten Schöning
--
AM-SoFT IT-Service - Bitstore Hameln GmbH
Mitglied der Bitstore Gruppe - Ihr Full-Service-Dienstleister für IT und TK
E-Mail: [email protected]
Web: http://www.AM-SoFT.de/
Tel: 05151- 9468- 0
Tel: 05151- 9468-55
Fax: 05151- 9468-88
Mobil: 0178-8 9468-04
AM-SoFT IT-Service - Bitstore Hameln GmbH, Brandenburger Str. 7c, 31789 Hameln
AG Hannover HRB 221853 - Geschäftsführer: Janine Galonska
src/main/cpp/nteventlogappender.cpp | 9 +++++----
src/main/cpp/outputdebugstringappender.cpp | 3 ++-
src/main/cpp/smtpappender.cpp | 2 +-
src/test/cpp/net/telnetappendertestcase.cpp | 2 +-
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/main/cpp/nteventlogappender.cpp
b/src/main/cpp/nteventlogappender.cpp
index cce5f91e..6ac9da2d 100644
--- a/src/main/cpp/nteventlogappender.cpp
+++ b/src/main/cpp/nteventlogappender.cpp
@@ -26,6 +26,7 @@
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/transcoder.h>
#include <log4cxx/helpers/pool.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
using namespace log4cxx;
using namespace log4cxx::spi;
@@ -95,9 +96,9 @@ NTEventLogAppender::NTEventLogAppender() : hEventLog(NULL),
pCurrentUserSID(NULL
}
NTEventLogAppender::NTEventLogAppender(const LogString& server, const
LogString& log, const LogString& source, const LayoutPtr& layout)
- : server(server), log(log), source(source), hEventLog(NULL),
pCurrentUserSID(NULL)
+ :
AppenderSkeleton(std::make_unique<AppenderSkeletonPrivate>(layout)),
+ server(server), log(log), source(source), hEventLog(NULL),
pCurrentUserSID(NULL)
{
- this->layout = layout;
Pool pool;
activateOptions(pool);
}
@@ -149,7 +150,7 @@ void NTEventLogAppender::activateOptions(Pool&)
{
LogLog::warn(
((LogString) LOG4CXX_STR("Source option not set for
appender ["))
- + name + LOG4CXX_STR("]."));
+ + this->m_priv->name + LOG4CXX_STR("]."));
return;
}
@@ -191,7 +192,7 @@ void NTEventLogAppender::append(const LoggingEventPtr&
event, Pool& p)
}
LogString oss;
- layout->format(oss, event, p);
+ this->m_priv->layout->format(oss, event, p);
wchar_t* msgs = Transcoder::wencode(oss, p);
BOOL bSuccess = ::ReportEventW(
hEventLog,
diff --git a/src/main/cpp/outputdebugstringappender.cpp
b/src/main/cpp/outputdebugstringappender.cpp
index a394b8ae..0673ee04 100644
--- a/src/main/cpp/outputdebugstringappender.cpp
+++ b/src/main/cpp/outputdebugstringappender.cpp
@@ -18,6 +18,7 @@
#if defined(_WIN32)
#include <log4cxx/nt/outputdebugstringappender.h>
#include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
#include "windows.h"
@@ -34,7 +35,7 @@ OutputDebugStringAppender::OutputDebugStringAppender()
void OutputDebugStringAppender::append(const spi::LoggingEventPtr& event,
Pool& p)
{
LogString buf;
- layout->format(buf, event, p);
+ this->m_priv->layout->format(buf, event, p);
#if LOG4CXX_WCHAR_T_API
LOG4CXX_ENCODE_WCHAR(wstr, buf);
::OutputDebugStringW(wstr.c_str());
diff --git a/src/main/cpp/smtpappender.cpp b/src/main/cpp/smtpappender.cpp
index 64c3c3b4..42cd6ed3 100644
--- a/src/main/cpp/smtpappender.cpp
+++ b/src/main/cpp/smtpappender.cpp
@@ -823,5 +823,5 @@ void SMTPAppender::setEvaluatorClass(const LogString& value)
int SMTPAppender::getBufferSize() const
{
-
+ return _priv->bufferSize;
}
diff --git a/src/test/cpp/net/telnetappendertestcase.cpp
b/src/test/cpp/net/telnetappendertestcase.cpp
index 0ca1caf2..7482f959 100644
--- a/src/test/cpp/net/telnetappendertestcase.cpp
+++ b/src/test/cpp/net/telnetappendertestcase.cpp
@@ -48,7 +48,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
static LayoutPtr createLayout()
{
PatternLayoutPtr pl = std::make_shared<PatternLayout>();
- pl->setConversionPattern( "%r [%t] %-5p - %m%n" );
+ pl->setConversionPattern( LOG4CXX_STR("%r [%t] %-5p -
%m%n") );
return pl;
}