diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp index 0ecd3d034..b2350c73c 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(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(filename, append1); } else { diff --git a/src/main/cpp/multiprocessrollingfileappender.cpp b/src/main/cpp/multiprocessrollingfileappender.cpp index 86bb37c48..9b1f061f0 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(os); if( fos ) diff --git a/src/main/cpp/outputstreamwriter.cpp b/src/main/cpp/outputstreamwriter.cpp index 70ed97020..659a6c8b7 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(out1)) +OutputStreamWriter::OutputStreamWriter(LOG4CXX_16_CONST OutputStreamPtr& out) + : m_priv(std::make_unique(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(out1, enc1)) +OutputStreamWriter::OutputStreamWriter + ( LOG4CXX_16_CONST OutputStreamPtr& out + , LOG4CXX_16_CONST CharsetEncoderPtr& enc + ) + : m_priv(std::make_unique(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 954cd929c..4112864c9 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 + ( 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(os, this); return FileAppender::createWriter(cos); diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp index b1c5a6899..1d49236b8 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(layout1, writer1)) +#if LOG4CXX_ABI_VERSION <= 15 +WriterAppender::WriterAppender(const LayoutPtr& layout, helpers::WriterPtr& writer) + : AppenderSkeleton (std::make_unique(layout, writer)) { Pool p; activateOptions(p); } -WriterAppender::WriterAppender(const LayoutPtr& layout1) - : AppenderSkeleton (std::make_unique(layout1)) +WriterAppender::WriterAppender(const LayoutPtr& layout) + : AppenderSkeleton (std::make_unique(layout)) { } +#else +WriterAppender::WriterAppender(const LayoutPtr& layout, const helpers::WriterPtr& writer) + : AppenderSkeleton(std::make_unique(layout, writer)) +{ + Pool p; + activateOptions(p); +} +#endif WriterAppender::WriterAppender(std::unique_ptr priv) : AppenderSkeleton (std::move(priv)) @@ -182,7 +190,7 @@ void WriterAppender::closeWriter() encoding 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(os, encoder); } LogString WriterAppender::getEncoding() const diff --git a/src/main/include/log4cxx/fileappender.h b/src/main/include/log4cxx/fileappender.h index 87c843501..10722c071 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 opens 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 1d1777c86..547744b96 100644 --- a/src/main/include/log4cxx/helpers/outputstreamwriter.h +++ b/src/main/include/log4cxx/helpers/outputstreamwriter.h @@ -22,6 +22,12 @@ #include #include +#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 dc268cddc..c9484299b 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 226d8ef78..c1b38a847 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 e1f7cdc83..276cf6e49 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 cf6c1f42d..2650cfcc4 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 priv); public: @@ -128,7 +126,7 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton encoding 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: //