This is an automated email from the ASF dual-hosted git repository.
swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/master by this push:
new 39854585 Simplify WriterAppender interface in the next ABI version
(#508)
39854585 is described below
commit 39854585dbca8ea30848f64552bfa887ef83e951
Author: Stephen Webb <[email protected]>
AuthorDate: Sat Jul 5 11:02:45 2025 +1000
Simplify WriterAppender interface in the next ABI version (#508)
Co-authored-by: Stephen Webb <[email protected]>
---
src/main/cpp/fileappender.cpp | 4 +--
src/main/cpp/multiprocessrollingfileappender.cpp | 2 +-
src/main/cpp/outputstreamwriter.cpp | 39 ++++++++++++----------
src/main/cpp/rollingfileappender.cpp | 26 +++++++++------
src/main/cpp/writerappender.cpp | 22 ++++++++----
src/main/include/log4cxx/fileappender.h | 4 +--
.../include/log4cxx/helpers/outputstreamwriter.h | 10 ++++--
.../include/log4cxx/private/writerappender_priv.h | 23 +++----------
.../rolling/multiprocessrollingfileappender.h | 2 +-
.../include/log4cxx/rolling/rollingfileappender.h | 2 +-
src/main/include/log4cxx/writerappender.h | 26 +++++++--------
11 files changed, 84 insertions(+), 76 deletions(-)
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index 0ecd3d03..b2350c73 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -323,7 +323,7 @@ void FileAppender::setFileInternal(
try
{
- outStream = FileOutputStreamPtr(new FileOutputStream(filename,
append1));
+ outStream = std::make_shared<FileOutputStream>(filename,
append1);
}
catch (IOException&)
{
@@ -336,7 +336,7 @@ void FileAppender::setFileInternal(
if (!parentDir.exists(p) && parentDir.mkdirs(p))
{
- outStream = OutputStreamPtr(new
FileOutputStream(filename, append1));
+ outStream =
std::make_shared<FileOutputStream>(filename, append1);
}
else
{
diff --git a/src/main/cpp/multiprocessrollingfileappender.cpp
b/src/main/cpp/multiprocessrollingfileappender.cpp
index 86bb37c4..9b1f061f 100644
--- a/src/main/cpp/multiprocessrollingfileappender.cpp
+++ b/src/main/cpp/multiprocessrollingfileappender.cpp
@@ -428,7 +428,7 @@ void MultiprocessRollingFileAppender::subAppend(const
LoggingEventPtr& event, Po
@param os output stream, may not be null.
@return new writer.
*/
-WriterPtr MultiprocessRollingFileAppender::createWriter(OutputStreamPtr& os)
+WriterPtr MultiprocessRollingFileAppender::createWriter(LOG4CXX_16_CONST
OutputStreamPtr& os)
{
auto fos = LOG4CXX_NS::cast<FileOutputStream>(os);
if( fos )
diff --git a/src/main/cpp/outputstreamwriter.cpp
b/src/main/cpp/outputstreamwriter.cpp
index 70ed9702..659a6c8b 100644
--- a/src/main/cpp/outputstreamwriter.cpp
+++ b/src/main/cpp/outputstreamwriter.cpp
@@ -27,38 +27,43 @@ using namespace LOG4CXX_NS::helpers;
IMPLEMENT_LOG4CXX_OBJECT(OutputStreamWriter)
-struct OutputStreamWriter::OutputStreamWriterPrivate{
- OutputStreamWriterPrivate(OutputStreamPtr& out1) : out(out1),
enc(CharsetEncoder::getDefaultEncoder()){}
-
- OutputStreamWriterPrivate(OutputStreamPtr& out1,
- CharsetEncoderPtr&
enc1)
- : out(out1), enc(enc1){}
+struct OutputStreamWriter::OutputStreamWriterPrivate
+{
+ OutputStreamWriterPrivate
+ ( const OutputStreamPtr& out1
+ , const CharsetEncoderPtr& enc1 =
CharsetEncoder::getDefaultEncoder()
+ )
+ : out(out1)
+ , enc(enc1)
+ {}
OutputStreamPtr out;
CharsetEncoderPtr enc;
};
-OutputStreamWriter::OutputStreamWriter(OutputStreamPtr& out1)
- : m_priv(std::make_unique<OutputStreamWriterPrivate>(out1))
+OutputStreamWriter::OutputStreamWriter(LOG4CXX_16_CONST OutputStreamPtr& out)
+ : m_priv(std::make_unique<OutputStreamWriterPrivate>(out))
{
- if (out1 == 0)
+ if (!out)
{
- throw NullPointerException(LOG4CXX_STR("out parameter may not
be null."));
+ throw NullPointerException(LOG4CXX_STR("OutputStream parameter
may not be null."));
}
}
-OutputStreamWriter::OutputStreamWriter(OutputStreamPtr& out1,
- CharsetEncoderPtr& enc1)
- : m_priv(std::make_unique<OutputStreamWriterPrivate>(out1, enc1))
+OutputStreamWriter::OutputStreamWriter
+ ( LOG4CXX_16_CONST OutputStreamPtr& out
+ , LOG4CXX_16_CONST CharsetEncoderPtr& enc
+ )
+ : m_priv(std::make_unique<OutputStreamWriterPrivate>(out, enc))
{
- if (out1 == 0)
+ if (!out)
{
- throw NullPointerException(LOG4CXX_STR("out parameter may not
be null."));
+ throw NullPointerException(LOG4CXX_STR("OutputStream parameter
may not be null."));
}
- if (enc1 == 0)
+ if (!enc)
{
- throw NullPointerException(LOG4CXX_STR("enc parameter may not
be null."));
+ throw NullPointerException(LOG4CXX_STR("CharsetEncoder
parameter may not be null."));
}
}
diff --git a/src/main/cpp/rollingfileappender.cpp
b/src/main/cpp/rollingfileappender.cpp
index 954cd929..4112864c 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -357,10 +357,11 @@ bool RollingFileAppender::rolloverInternal(Pool& p)
setFileInternal(rollover1->getActiveFileName());
// Call activateOptions
to create any intermediate directories(if required)
FileAppender::activateOptionsInternal(p);
- OutputStreamPtr os(new
FileOutputStream(
-
rollover1->getActiveFileName(), rollover1->getAppend()));
- WriterPtr
newWriter(createWriter(os));
-
setWriterInternal(newWriter);
+ OutputStreamPtr os =
std::make_shared<FileOutputStream>
+ (
rollover1->getActiveFileName()
+ ,
rollover1->getAppend()
+ );
+
setWriterInternal(createWriter(os));
bool success = true;
@@ -518,16 +519,19 @@ class CountingOutputStream : public OutputStream
* @param os output stream to wrap.
* @param rfa rolling file appender to inform.
*/
- CountingOutputStream(
- OutputStreamPtr& os1, RollingFileAppender* rfa1) :
- os(os1), rfa(rfa1)
+ CountingOutputStream
+ ( const OutputStreamPtr& os1
+ , RollingFileAppender* rfa1
+ )
+ : os(os1)
+ , rfa(rfa1)
{
}
/**
* {@inheritDoc}
*/
- void close(Pool& p)
+ void close(Pool& p) override
{
os->close(p);
rfa = 0;
@@ -536,7 +540,7 @@ class CountingOutputStream : public OutputStream
/**
* {@inheritDoc}
*/
- void flush(Pool& p)
+ void flush(Pool& p) override
{
os->flush(p);
}
@@ -544,7 +548,7 @@ class CountingOutputStream : public OutputStream
/**
* {@inheritDoc}
*/
- void write(ByteBuffer& buf, Pool& p)
+ void write(ByteBuffer& buf, Pool& p) override
{
os->write(buf, p);
@@ -566,7 +570,7 @@ class CountingOutputStream : public OutputStream
@param os output stream, may not be null.
@return new writer.
*/
-WriterPtr RollingFileAppender::createWriter(OutputStreamPtr& os)
+WriterPtr RollingFileAppender::createWriter(LOG4CXX_16_CONST OutputStreamPtr&
os)
{
OutputStreamPtr cos = std::make_shared<CountingOutputStream>(os, this);
return FileAppender::createWriter(cos);
diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp
index b1c5a689..1d49236b 100644
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@ -36,18 +36,26 @@ WriterAppender::WriterAppender() :
{
}
-WriterAppender::WriterAppender(const LayoutPtr& layout1,
- LOG4CXX_NS::helpers::WriterPtr& writer1)
- : AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout1,
writer1))
+#if LOG4CXX_ABI_VERSION <= 15
+WriterAppender::WriterAppender(const LayoutPtr& layout, helpers::WriterPtr&
writer)
+ : AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout,
writer))
{
Pool p;
activateOptions(p);
}
-WriterAppender::WriterAppender(const LayoutPtr& layout1)
- : AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout1))
+WriterAppender::WriterAppender(const LayoutPtr& layout)
+ : AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout))
{
}
+#else
+WriterAppender::WriterAppender(const LayoutPtr& layout, const
helpers::WriterPtr& writer)
+ : AppenderSkeleton(std::make_unique<WriterAppenderPriv>(layout, writer))
+{
+ Pool p;
+ activateOptions(p);
+}
+#endif
WriterAppender::WriterAppender(std::unique_ptr<WriterAppenderPriv> priv)
: AppenderSkeleton (std::move(priv))
@@ -182,7 +190,7 @@ void WriterAppender::closeWriter()
<code>encoding</code> property. If the encoding value is
specified incorrectly the writer will be opened using the default
system encoding (an error message will be printed to the loglog. */
-WriterPtr WriterAppender::createWriter(OutputStreamPtr& os)
+WriterPtr WriterAppender::createWriter(LOG4CXX_16_CONST OutputStreamPtr& os)
{
LogString enc(getEncoding());
@@ -213,7 +221,7 @@ WriterPtr WriterAppender::createWriter(OutputStreamPtr& os)
}
}
- return WriterPtr(new OutputStreamWriter(os, encoder));
+ return std::make_shared<OutputStreamWriter>(os, encoder);
}
LogString WriterAppender::getEncoding() const
diff --git a/src/main/include/log4cxx/fileappender.h
b/src/main/include/log4cxx/fileappender.h
index 87c84350..10722c07 100644
--- a/src/main/include/log4cxx/fileappender.h
+++ b/src/main/include/log4cxx/fileappender.h
@@ -219,7 +219,7 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
static LogString stripDuplicateBackslashes(const LogString&
name);
protected:
- void activateOptionsInternal(LOG4CXX_NS::helpers::Pool& p);
+ void activateOptionsInternal(helpers::Pool& p);
/**
Sets and <i>opens</i> the file where the log output will
@@ -243,7 +243,7 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
*/
void setFileInternal(const LogString& file, bool append,
bool bufferedIO, size_t bufferSize,
- LOG4CXX_NS::helpers::Pool& p);
+ helpers::Pool& p);
void setFileInternal(const LogString& file);
diff --git a/src/main/include/log4cxx/helpers/outputstreamwriter.h
b/src/main/include/log4cxx/helpers/outputstreamwriter.h
index 1d1777c8..547744b9 100644
--- a/src/main/include/log4cxx/helpers/outputstreamwriter.h
+++ b/src/main/include/log4cxx/helpers/outputstreamwriter.h
@@ -22,6 +22,12 @@
#include <log4cxx/helpers/outputstream.h>
#include <log4cxx/helpers/charsetencoder.h>
+#if 15 < LOG4CXX_ABI_VERSION
+#define LOG4CXX_16_CONST const
+#else
+#define LOG4CXX_16_CONST
+#endif
+
namespace LOG4CXX_NS
{
@@ -43,8 +49,8 @@ class LOG4CXX_EXPORT OutputStreamWriter : public Writer
LOG4CXX_CAST_ENTRY_CHAIN(Writer)
END_LOG4CXX_CAST_MAP()
- OutputStreamWriter(OutputStreamPtr& out);
- OutputStreamWriter(OutputStreamPtr& out, CharsetEncoderPtr&
enc);
+ OutputStreamWriter(LOG4CXX_16_CONST OutputStreamPtr& out);
+ OutputStreamWriter(LOG4CXX_16_CONST OutputStreamPtr& out,
LOG4CXX_16_CONST CharsetEncoderPtr& enc);
~OutputStreamWriter();
void close(Pool& p) override;
diff --git a/src/main/include/log4cxx/private/writerappender_priv.h
b/src/main/include/log4cxx/private/writerappender_priv.h
index dc268cdd..c9484299 100644
--- a/src/main/include/log4cxx/private/writerappender_priv.h
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -42,24 +42,11 @@ struct WriterAppender::WriterAppenderPriv : public
AppenderSkeleton::AppenderSke
{
}
- WriterAppenderPriv(const LayoutPtr& layout1,
- LOG4CXX_NS::helpers::WriterPtr& writer1) :
- AppenderSkeletonPrivate(layout1),
- immediateFlush(true),
- writer(writer1)
-#if LOG4CXX_EVENTS_AT_EXIT
- , atExitRegistryRaii{ [this]{flush();} }
-#endif
- {
- }
-
- WriterAppenderPriv(const LayoutPtr& layout1) :
- AppenderSkeletonPrivate(layout1),
- immediateFlush(true)
-#if LOG4CXX_EVENTS_AT_EXIT
- , atExitRegistryRaii{ [this]{flush();} }
-#endif
+ WriterAppenderPriv(const LayoutPtr& layout1, const helpers::WriterPtr&
writer1 = helpers::WriterPtr())
+ : WriterAppenderPriv()
{
+ this->layout = layout1;
+ this->writer = writer1;
}
void flush()
@@ -94,7 +81,7 @@ struct WriterAppender::WriterAppenderPriv : public
AppenderSkeleton::AppenderSke
/**
* This is the {@link Writer Writer} where we will write to.
*/
- LOG4CXX_NS::helpers::WriterPtr writer;
+ helpers::WriterPtr writer;
#if LOG4CXX_EVENTS_AT_EXIT
helpers::AtExitRegistry::Raii atExitRegistryRaii;
diff --git a/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
b/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
index 226d8ef7..c1b38a84 100644
--- a/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
@@ -91,7 +91,7 @@ class LOG4CXX_EXPORT MultiprocessRollingFileAppender : public
RollingFileAppende
@param os output stream, may not be null.
@return new writer.
*/
- helpers::WriterPtr createWriter(helpers::OutputStreamPtr& os)
override;
+ helpers::WriterPtr createWriter(LOG4CXX_16_CONST
helpers::OutputStreamPtr& os) override;
private:
/**
diff --git a/src/main/include/log4cxx/rolling/rollingfileappender.h
b/src/main/include/log4cxx/rolling/rollingfileappender.h
index e1f7cdc8..276cf6e4 100644
--- a/src/main/include/log4cxx/rolling/rollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/rollingfileappender.h
@@ -220,7 +220,7 @@ class LOG4CXX_EXPORT RollingFileAppender : public
FileAppender
@param os output stream, may not be null.
@return new writer.
*/
- helpers::WriterPtr createWriter(helpers::OutputStreamPtr& os)
override;
+ helpers::WriterPtr createWriter(LOG4CXX_16_CONST
helpers::OutputStreamPtr& os) override;
public:
/**
diff --git a/src/main/include/log4cxx/writerappender.h
b/src/main/include/log4cxx/writerappender.h
index cf6c1f42..2650cfcc 100644
--- a/src/main/include/log4cxx/writerappender.h
+++ b/src/main/include/log4cxx/writerappender.h
@@ -25,11 +25,6 @@
namespace LOG4CXX_NS
{
-namespace helpers
-{
-class Transcoder;
-}
-
/**
WriterAppender appends log events to a standard output stream
*/
@@ -48,9 +43,12 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
This default constructor does nothing.*/
WriterAppender();
protected:
- WriterAppender(const LayoutPtr& layout,
- LOG4CXX_NS::helpers::WriterPtr& writer);
+#if LOG4CXX_ABI_VERSION <= 15
+ WriterAppender(const LayoutPtr& layout, helpers::WriterPtr&
writer);
WriterAppender(const LayoutPtr& layout);
+#else
+ WriterAppender(const LayoutPtr& layout, const
helpers::WriterPtr& writer = helpers::WriterPtr());
+#endif
WriterAppender(std::unique_ptr<WriterAppenderPriv> priv);
public:
@@ -128,7 +126,7 @@ class LOG4CXX_EXPORT WriterAppender : public
AppenderSkeleton
<code>encoding</code> property. If the encoding value is
specified incorrectly the writer will be opened using the
default
system encoding (an error message will be printed to the
loglog. */
- virtual helpers::WriterPtr
createWriter(helpers::OutputStreamPtr& os);
+ virtual helpers::WriterPtr createWriter(LOG4CXX_16_CONST
helpers::OutputStreamPtr& os);
public:
/**
@@ -165,9 +163,9 @@ class LOG4CXX_EXPORT WriterAppender : public
AppenderSkeleton
@param writer An already opened Writer.
*/
- void setWriter(const LOG4CXX_NS::helpers::WriterPtr& writer);
+ void setWriter(const helpers::WriterPtr& writer);
- const LOG4CXX_NS::helpers::WriterPtr getWriter() const;
+ const helpers::WriterPtr getWriter() const;
bool requiresLayout() const override;
@@ -175,23 +173,23 @@ class LOG4CXX_EXPORT WriterAppender : public
AppenderSkeleton
/**
Actual writing occurs here.
*/
- virtual void subAppend(const spi::LoggingEventPtr& event,
LOG4CXX_NS::helpers::Pool& p);
+ virtual void subAppend(const spi::LoggingEventPtr& event,
helpers::Pool& p);
/**
Write a footer as produced by the embedded layout's
Layout#appendFooter method. */
- virtual void writeFooter(LOG4CXX_NS::helpers::Pool& p);
+ virtual void writeFooter(helpers::Pool& p);
/**
Write a header as produced by the embedded layout's
Layout#appendHeader method. */
- virtual void writeHeader(LOG4CXX_NS::helpers::Pool& p);
+ virtual void writeHeader(helpers::Pool& p);
/**
* Set the writer. Mutex must already be held.
*/
- void setWriterInternal(const LOG4CXX_NS::helpers::WriterPtr&
writer);
+ void setWriterInternal(const helpers::WriterPtr& writer);
private:
//