This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch simplify_writer_appender
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit 4ba4a17b8831055a88115233a40f2caa5b22e9de
Author: Stephen Webb <[email protected]>
AuthorDate: Fri Jul 4 11:19:08 2025 +1000

    Simplify WriterAppender interface in the next ABI version
---
 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   |  4 +--
 .../include/log4cxx/private/writerappender_priv.h  |  7 ++--
 .../rolling/multiprocessrollingfileappender.h      |  2 +-
 .../include/log4cxx/rolling/rollingfileappender.h  |  2 +-
 src/main/include/log4cxx/writerappender.h          | 26 +++++++--------
 11 files changed, 77 insertions(+), 61 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..bbb2e9f4 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(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..8c8ae429 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(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
+       ( const OutputStreamPtr& out
+       , 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..e791918e 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);
+                                                       auto 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(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..cae46e94 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(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..336836cc 100644
--- a/src/main/include/log4cxx/helpers/outputstreamwriter.h
+++ b/src/main/include/log4cxx/helpers/outputstreamwriter.h
@@ -43,8 +43,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(const OutputStreamPtr& out);
+               OutputStreamWriter(const OutputStreamPtr& out, 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..1a82bc64 100644
--- a/src/main/include/log4cxx/private/writerappender_priv.h
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -42,8 +42,7 @@ struct WriterAppender::WriterAppenderPriv : public 
AppenderSkeleton::AppenderSke
        {
        }
 
-       WriterAppenderPriv(const LayoutPtr& layout1,
-               LOG4CXX_NS::helpers::WriterPtr& writer1) :
+       WriterAppenderPriv(const LayoutPtr& layout1, const helpers::WriterPtr& 
writer1) :
                AppenderSkeletonPrivate(layout1),
                immediateFlush(true),
                writer(writer1)
@@ -53,6 +52,7 @@ struct WriterAppender::WriterAppenderPriv : public 
AppenderSkeleton::AppenderSke
        {
        }
 
+#if LOG4CXX_ABI_VERSION <= 15
        WriterAppenderPriv(const LayoutPtr& layout1) :
                AppenderSkeletonPrivate(layout1),
                immediateFlush(true)
@@ -61,6 +61,7 @@ struct WriterAppender::WriterAppenderPriv : public 
AppenderSkeleton::AppenderSke
 #endif
        {
        }
+#endif
 
        void flush()
        {
@@ -94,7 +95,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..51ea941b 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(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..6679de51 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(const helpers::OutputStreamPtr& 
os) override;
 
        public:
                /**
diff --git a/src/main/include/log4cxx/writerappender.h 
b/src/main/include/log4cxx/writerappender.h
index cf6c1f42..5de8a1ae 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(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:
                //

Reply via email to