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: //
