You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rm...@apache.org on 2021/12/26 16:56:04 UTC
[logging-log4cxx] 01/02: Merge branch 'master' into next_stable
This is an automated email from the ASF dual-hosted git repository.
rmiddleton pushed a commit to branch next_stable
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 342afee2df773da628c94f3e2b194f322cc24bad
Merge: c7a145f ad4371c
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Sun Dec 26 11:26:08 2021 -0500
Merge branch 'master' into next_stable
.gitattributes | 6 ++
.gitignore | 7 ++-
CMakeLists.txt | 12 ++--
src/main/cpp/appenderskeleton.cpp | 10 ++--
src/main/cpp/asyncappender.cpp | 2 +-
src/main/cpp/fileappender.cpp | 18 +++---
src/main/cpp/rollingfileappender.cpp | 4 +-
src/main/cpp/socketappenderskeleton.cpp | 17 +++---
src/main/cpp/sockethubappender.cpp | 6 +-
src/main/cpp/telnetappender.cpp | 10 ++--
src/main/cpp/writerappender.cpp | 4 +-
src/main/cpp/xmlsocketappender.cpp | 4 +-
src/main/include/log4cxx/log4cxx.h.in | 11 ++++
.../log4cxx/private/appenderskeleton_priv.h | 2 +-
src/site/markdown/1-usage.md | 1 +
src/site/markdown/performance.md | 67 ++++++++++++++++++++++
src/test/cpp/customlogger/xloggertestcase.cpp | 2 +-
src/test/cpp/helpers/propertiestestcase.cpp | 61 +++++++++++++++-----
src/test/cpp/hierarchythresholdtestcase.cpp | 2 +-
src/test/cpp/l7dtestcase.cpp | 2 +-
src/test/cpp/minimumtestcase.cpp | 2 +-
src/test/cpp/ndctestcase.cpp | 2 +-
src/test/cpp/net/socketappendertestcase.cpp | 46 +++++++++++++++
src/test/cpp/patternlayouttest.cpp | 4 +-
src/test/cpp/util/transformer.cpp | 19 +++++-
src/test/cpp/varia/errorhandlertestcase.cpp | 4 +-
src/test/java/CMakeLists.txt | 21 +++++--
.../resources/input/hierarchyThreshold1.properties | 2 +-
.../resources/input/hierarchyThreshold2.properties | 2 +-
.../resources/input/hierarchyThreshold3.properties | 2 +-
.../resources/input/hierarchyThreshold4.properties | 2 +-
.../resources/input/hierarchyThreshold5.properties | 2 +-
.../resources/input/hierarchyThreshold6.properties | 2 +-
.../resources/input/hierarchyThreshold7.properties | 2 +-
.../resources/input/hierarchyThreshold8.properties | 2 +-
src/test/resources/input/l7d1.properties | 2 +-
src/test/resources/input/ndc/NDC1.properties | 2 +-
.../resources/input/patternLayout.mdc.1.properties | 2 +-
src/test/resources/input/patternLayout1.properties | 6 +-
.../resources/input/patternLayout10.properties | 2 +-
.../resources/input/patternLayout11.properties | 2 +-
.../resources/input/patternLayout12.properties | 2 +-
.../resources/input/patternLayout13.properties | 4 +-
src/test/resources/input/patternLayout2.properties | 2 +-
src/test/resources/input/patternLayout4.properties | 2 +-
src/test/resources/input/patternLayout5.properties | 2 +-
src/test/resources/input/patternLayout6.properties | 2 +-
src/test/resources/input/patternLayout7.properties | 2 +-
src/test/resources/input/patternLayout8.properties | 2 +-
src/test/resources/input/patternLayout9.properties | 2 +-
...operties => propertiestestcase-crlf.properties} | 11 ++--
...properties => propertiestestcase-lf.properties} | 11 ++--
...perties => propertiestestcase-mixed.properties} | 10 +---
.../resources/input/propertiestestcase.properties | 2 +-
src/test/resources/input/xml/customLogger1.xml | 2 +-
src/test/resources/input/xml/customLogger2.xml | 2 +-
src/test/resources/input/xml/fallback1.xml | 2 +-
57 files changed, 308 insertions(+), 130 deletions(-)
diff --cc src/main/cpp/appenderskeleton.cpp
index b881d52,0705c6e..fdc489c
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@@ -62,13 -68,13 +62,13 @@@ void AppenderSkeleton::finalize(
close();
}
-void AppenderSkeleton::addFilter(const spi::FilterPtr& newFilter)
+void AppenderSkeleton::addFilter(const spi::FilterPtr newFilter)
{
- std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
- if (headFilter == 0)
+ if (m_priv->headFilter == nullptr)
{
- headFilter = tailFilter = newFilter;
+ m_priv->headFilter = m_priv->tailFilter = newFilter;
}
else
{
@@@ -79,8 -85,8 +79,8 @@@
void AppenderSkeleton::clearFilters()
{
- std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- headFilter = tailFilter = 0;
++ std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
+ m_priv->headFilter = m_priv->tailFilter = nullptr;
}
bool AppenderSkeleton::isAsSevereAsThreshold(const LevelPtr& level) const
@@@ -90,7 -96,7 +90,7 @@@
void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
{
- std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
doAppendImpl(event, pool1);
}
@@@ -133,9 -139,9 +133,9 @@@ void AppenderSkeleton::doAppendImpl(con
void AppenderSkeleton::setErrorHandler(const spi::ErrorHandlerPtr errorHandler1)
{
- std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
- if (errorHandler1 == 0)
+ if (errorHandler1 == nullptr)
{
// We do not throw exception here since the cause is probably a
// bad config file.
@@@ -149,8 -155,8 +149,8 @@@
void AppenderSkeleton::setThreshold(const LevelPtr& threshold1)
{
- std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- this->threshold = threshold1;
++ std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
+ m_priv->threshold = threshold1;
}
void AppenderSkeleton::setOption(const LogString& option,
diff --cc src/main/cpp/asyncappender.cpp
index 2b97487,876c257..2310083
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@@ -201,7 -92,7 +201,7 @@@ void AsyncAppender::setOption(const Log
void AsyncAppender::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
{
- std::unique_lock<log4cxx::shared_mutex> lock(priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(priv->mutex);
doAppendImpl(event, pool1);
}
diff --cc src/main/cpp/fileappender.cpp
index 774b19e,e04d730..59073e4
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@@ -95,13 -93,13 +95,13 @@@ FileAppender::~FileAppender(
void FileAppender::setAppend(bool fileAppend1)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- this->fileAppend = fileAppend1;
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->fileAppend = fileAppend1;
}
void FileAppender::setFile(const LogString& file)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
setFileInternal(file);
}
@@@ -112,8 -110,8 +112,8 @@@ void FileAppender::setFileInternal(cons
void FileAppender::setBufferedIO(bool bufferedIO1)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- this->bufferedIO = bufferedIO1;
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->bufferedIO = bufferedIO1;
if (bufferedIO1)
{
@@@ -127,28 -125,28 +127,28 @@@ void FileAppender::setOption(const LogS
if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("FILE"), LOG4CXX_STR("file"))
|| StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("FILENAME"), LOG4CXX_STR("filename")))
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- fileName = stripDuplicateBackslashes(value);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->fileName = stripDuplicateBackslashes(value);
}
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("APPEND"), LOG4CXX_STR("append")))
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- fileAppend = OptionConverter::toBoolean(value, true);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->fileAppend = OptionConverter::toBoolean(value, true);
}
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFEREDIO"), LOG4CXX_STR("bufferedio")))
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- bufferedIO = OptionConverter::toBoolean(value, true);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->bufferedIO = OptionConverter::toBoolean(value, true);
}
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("IMMEDIATEFLUSH"), LOG4CXX_STR("immediateflush")))
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- bufferedIO = !OptionConverter::toBoolean(value, false);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->bufferedIO = !OptionConverter::toBoolean(value, false);
}
else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFERSIZE"), LOG4CXX_STR("buffersize")))
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- bufferSize = OptionConverter::toFileSize(value, 8 * 1024);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->bufferSize = OptionConverter::toFileSize(value, 8 * 1024);
}
else
{
@@@ -158,7 -156,7 +158,7 @@@
void FileAppender::activateOptions(Pool& p)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
activateOptionsInternal(p);
}
diff --cc src/main/cpp/rollingfileappender.cpp
index dece266,48aad5f..838938d
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@@ -119,9 -94,9 +119,9 @@@ void RollingFileAppender::activateOptio
}
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- triggeringPolicy->activateOptions(p);
- rollingPolicy->activateOptions(p);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->triggeringPolicy->activateOptions(p);
+ _priv->rollingPolicy->activateOptions(p);
try
{
@@@ -206,9 -181,9 +206,9 @@@ void RollingFileAppenderSkeleton::relea
* @return true if rollover performed.
*/
-bool RollingFileAppenderSkeleton::rollover(Pool& p)
+bool RollingFileAppender::rollover(Pool& p)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
return rolloverInternal(p);
}
diff --cc src/main/cpp/socketappenderskeleton.cpp
index 676cf58,b0b73b4..de79bd8
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@@ -55,9 -78,9 +55,9 @@@ void SocketAppenderSkeleton::activateOp
void SocketAppenderSkeleton::close()
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
- if (closed)
+ if (_priv->closed)
{
return;
}
@@@ -134,9 -157,16 +134,9 @@@ void SocketAppenderSkeleton::setOption(
void SocketAppenderSkeleton::fireConnector()
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
-
- if( thread.joinable() ){
- // This should only get called if the thread has already exited.
- // We could have a potential bug if fireConnector is called while
- // the thread is waiting for a connection
- thread.join();
- }
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
- if ( !thread.joinable() )
+ if ( !_priv->thread.joinable() )
{
LogLog::debug(LOG4CXX_STR("Connector thread not alive: starting monitor."));
@@@ -153,17 -183,11 +153,11 @@@ void SocketAppenderSkeleton::monitor(
{
try
{
- std::this_thread::sleep_for( std::chrono::milliseconds( _priv->reconnectionDelay ) );
-
- std::unique_lock<std::mutex> lock( _priv->interrupt_mutex );
- _priv->interrupt.wait_for( lock, std::chrono::milliseconds( _priv->reconnectionDelay ),
- std::bind(&SocketAppenderSkeleton::is_closed, this) );
-
- if (!closed)
+ if (!_priv->closed)
{
LogLog::debug(LogString(LOG4CXX_STR("Attempting connection to "))
- + address->getHostName());
- socket = SocketPtr(new Socket(address, port));
+ + _priv->address->getHostName());
+ socket = SocketPtr(new Socket(_priv->address, _priv->port));
Pool p;
setSocket(socket, p);
LogLog::debug(LOG4CXX_STR("Connection established. Exiting connector thread."));
@@@ -193,7 -216,11 +186,11 @@@
+ exmsg);
}
- std::unique_lock<std::mutex> lock( interrupt_mutex );
- interrupt.wait_for( lock, std::chrono::milliseconds( reconnectionDelay ),
++ std::unique_lock<std::mutex> lock( _priv->interrupt_mutex );
++ _priv->interrupt.wait_for( lock, std::chrono::milliseconds( _priv->reconnectionDelay ),
+ std::bind(&SocketAppenderSkeleton::is_closed, this) );
+
- isClosed = closed;
+ isClosed = _priv->closed;
}
LogLog::debug(LOG4CXX_STR("Exiting Connector.run() method."));
diff --cc src/main/cpp/sockethubappender.cpp
index fae4fdf,6a8a0aa..86613bb
--- a/src/main/cpp/sockethubappender.cpp
+++ b/src/main/cpp/sockethubappender.cpp
@@@ -102,9 -84,9 +102,9 @@@ void SocketHubAppender::setOption(cons
void SocketHubAppender::close()
{
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
- if (closed)
+ if (_priv->closed)
{
return;
}
@@@ -117,12 -99,12 +117,12 @@@
//
// wait until the server thread completes
//
- if ( thread.joinable() )
+ if ( _priv->thread.joinable() )
{
- thread.join();
+ _priv->thread.join();
}
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
// close all of the connections
LogLog::debug(LOG4CXX_STR("closing client connections"));
@@@ -252,7 -234,7 +252,7 @@@ void SocketHubAppender::monitor(
+ LOG4CXX_STR(")"));
// add it to the oosList.
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
OutputStreamPtr os(new SocketOutputStream(socket));
Pool p;
ObjectOutputStreamPtr oos(new ObjectOutputStream(os, p));
diff --cc src/main/cpp/telnetappender.cpp
index 4c095bd,2a880ee..9a2e8ee
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@@ -101,23 -84,23 +101,23 @@@ void TelnetAppender::setOption(const Lo
LogString TelnetAppender::getEncoding() const
{
- log4cxx::shared_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- return encoding;
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ return _priv->encoding;
}
void TelnetAppender::setEncoding(const LogString& value)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- encoder = CharsetEncoder::getEncoder(value);
- encoding = value;
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
+ _priv->encoder = CharsetEncoder::getEncoder(value);
+ _priv->encoding = value;
}
void TelnetAppender::close()
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
- if (closed)
+ if (_priv->closed)
{
return;
}
@@@ -212,7 -195,7 +212,7 @@@ void TelnetAppender::append(const spi::
LogString::const_iterator msgIter(msg.begin());
ByteBuffer buf(bytes, bytesSize);
- log4cxx::shared_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
while (msgIter != msg.end())
{
@@@ -268,10 -251,10 +268,10 @@@ void TelnetAppender::acceptConnections(
//
// find unoccupied connection
//
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
- for (ConnectionList::iterator iter = connections.begin();
- iter != connections.end();
+ for (ConnectionList::iterator iter = _priv->connections.begin();
+ iter != _priv->connections.end();
iter++)
{
if (*iter == NULL)
diff --cc src/main/cpp/writerappender.cpp
index afe61cf,1d4303d..02fe154
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@@ -158,9 -151,9 +158,9 @@@ bool WriterAppender::checkEntryConditio
*/
void WriterAppender::close()
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
- if (closed)
+ if (_priv->closed)
{
return;
}
@@@ -285,7 -278,7 +285,7 @@@ void WriterAppender::writeHeader(Pool&
void WriterAppender::setWriter(const WriterPtr& newWriter)
{
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- std::lock_guard<std::recursive_mutex> lock(mutex);
++ std::unique_lock<std::recursive_mutex> lock(_priv->mutex);
setWriterInternal(newWriter);
}
diff --cc src/main/cpp/xmlsocketappender.cpp
index 78b0a0c,36fdfce..39134ad
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@@ -102,8 -84,8 +102,8 @@@ void XMLSocketAppender::setSocket(log4c
{
OutputStreamPtr os(new SocketOutputStream(socket));
CharsetEncoderPtr charset(CharsetEncoder::getUTF8Encoder());
- std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
- _priv->writer = std::make_shared<OutputStreamWriter>(os, charset);
- std::lock_guard<std::recursive_mutex> lock(mutex);
- writer = OutputStreamWriterPtr(new OutputStreamWriter(os, charset));
++ std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
++ _priv->writer = OutputStreamWriterPtr(new OutputStreamWriter(os, charset));
}
void XMLSocketAppender::cleanUp(Pool& p)
diff --cc src/main/include/log4cxx/private/appenderskeleton_priv.h
index 07a7457,0000000..4a6b831
mode 100644,000000..100644
--- a/src/main/include/log4cxx/private/appenderskeleton_priv.h
+++ b/src/main/include/log4cxx/private/appenderskeleton_priv.h
@@@ -1,75 -1,0 +1,75 @@@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOG4CXX_APPENDERSKELETON_PRIV
+#define _LOG4CXX_APPENDERSKELETON_PRIV
+
+#include <log4cxx/appenderskeleton.h>
+#include <log4cxx/helpers/onlyonceerrorhandler.h>
+#include <memory>
+
+namespace log4cxx
+{
+
+struct AppenderSkeleton::AppenderSkeletonPrivate
+{
+ AppenderSkeletonPrivate() :
+ threshold(Level::getAll()),
+ errorHandler(std::make_shared<log4cxx::helpers::OnlyOnceErrorHandler>()),
+ closed(false) {}
+
+ AppenderSkeletonPrivate( LayoutPtr lay ) :
+ layout( lay ),
+ threshold(Level::getAll()),
+ errorHandler(std::make_shared<log4cxx::helpers::OnlyOnceErrorHandler>()),
+ closed(false) {}
+
+ /** The layout variable does not need to be set if the appender
+ implementation has its own layout. */
+ LayoutPtr layout;
+
+ /** Appenders are named. */
+ LogString name;
+
+ /**
+ There is no level threshold filtering by default. */
+ LevelPtr threshold;
+
+ /**
+ It is assumed and enforced that errorHandler is never null.
+ */
+ spi::ErrorHandlerPtr errorHandler;
+
+ /** The first filter in the filter chain. Set to <code>null</code>
+ initially. */
+ spi::FilterPtr headFilter;
+
+ /** The last filter in the filter chain. */
+ spi::FilterPtr tailFilter;
+
+ /**
+ Is this appender closed?
+ */
+ bool closed;
+
+ log4cxx::helpers::Pool pool;
- mutable log4cxx::shared_mutex mutex;
++ mutable std::recursive_mutex mutex;
+};
+
+}
+
+#endif /* _LOG4CXX_APPENDERSKELETON_PRIV */