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

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

commit 4bd33818e3e39ebe392309261d6521bd6ec5ee14
Author: Stephen Webb <[email protected]>
AuthorDate: Wed May 15 14:58:08 2024 +1000

    Warn about each instance of a mis-configured appender
---
 src/main/cpp/appenderskeleton.cpp                  | 31 ++++++++++++++++
 src/main/cpp/writerappender.cpp                    | 42 +++++-----------------
 .../log4cxx/private/appenderskeleton_priv.h        |  6 ++++
 .../include/log4cxx/private/writerappender_priv.h  |  3 ++
 4 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/src/main/cpp/appenderskeleton.cpp 
b/src/main/cpp/appenderskeleton.cpp
index 878a89dc..3a5e7495 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -131,6 +131,37 @@ void AppenderSkeleton::doAppendImpl(const 
spi::LoggingEventPtr& event, Pool& poo
        append(event, pool1);
 }
 
+bool AppenderSkeleton::AppenderSkeletonPrivate::checkNotClosed()
+{
+       if (this->closed)
+       {
+               if (!this->warnedClosed)
+               {
+                       LogLog::warn(LOG4CXX_STR("Not allowed to write to a 
closed appender."));
+                       this->warnedClosed = true;
+               }
+               return false;
+       }
+       return true;
+}
+
+bool AppenderSkeleton::AppenderSkeletonPrivate::checkLayout()
+{
+       if (!this->layout)
+       {
+               if (!this->warnedNoLayout)
+               {
+                       this->errorHandler->error
+                               ( LogString(LOG4CXX_STR("No layout set for the 
appender named ["))
+                               + this->name + LOG4CXX_STR("].")
+                               );
+                       this->warnedNoLayout = true;
+               }
+               return false;
+       }
+       return true;
+}
+
 void AppenderSkeleton::setErrorHandler(const spi::ErrorHandlerPtr 
errorHandler1)
 {
        std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp
index 5751f255..b1c5a689 100644
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@ -107,46 +107,22 @@ void WriterAppender::append(const spi::LoggingEventPtr& 
event, Pool& pool1)
    value <code>false</code> is returned. */
 bool WriterAppender::checkEntryConditions() const
 {
-       static bool warnedClosed = false;
-       static bool warnedNoWriter = false;
-       static bool warnedNoLayout = false;
-
-       if (_priv->closed)
-       {
-               if (!warnedClosed)
-               {
-                       LogLog::warn(LOG4CXX_STR("Not allowed to write to a 
closed appender."));
-                       warnedClosed = true;
-               }
-
-               return false;
-       }
+       return _priv->checkWriter() && _priv->checkLayout() && 
_priv->checkNotClosed();
+}
 
-       if (_priv->writer == 0)
+bool WriterAppender::WriterAppenderPriv::checkWriter()
+{
+       if (this->writer == 0)
        {
-               if (!warnedNoWriter)
+               if (!this->warnedNoWriter)
                {
-                       _priv->errorHandler->error(
+                       this->errorHandler->error(
                                LogString(LOG4CXX_STR("No output stream or file 
set for the appender named [")) +
-                               _priv->name + LOG4CXX_STR("]."));
-                       warnedNoWriter = true;
-               }
-
-               return false;
-       }
-
-       if (_priv->layout == 0)
-       {
-               if (!warnedNoLayout)
-               {
-                       _priv->errorHandler->error(
-                               LogString(LOG4CXX_STR("No layout set for the 
appender named [")) +
-                               _priv->name + LOG4CXX_STR("]."));
-                       warnedNoLayout = true;
+                               this->name + LOG4CXX_STR("]."));
+                       this->warnedNoWriter = true;
                }
                return false;
        }
-
        return true;
 }
 
diff --git a/src/main/include/log4cxx/private/appenderskeleton_priv.h 
b/src/main/include/log4cxx/private/appenderskeleton_priv.h
index b9660cf3..cba7bec4 100644
--- a/src/main/include/log4cxx/private/appenderskeleton_priv.h
+++ b/src/main/include/log4cxx/private/appenderskeleton_priv.h
@@ -70,6 +70,12 @@ struct AppenderSkeleton::AppenderSkeletonPrivate
 
        LOG4CXX_NS::helpers::Pool pool;
        mutable std::recursive_mutex mutex;
+
+       bool warnedClosed = false;
+       bool checkNotClosed();
+
+       bool warnedNoLayout = false;
+       bool checkLayout();
 };
 
 }
diff --git a/src/main/include/log4cxx/private/writerappender_priv.h 
b/src/main/include/log4cxx/private/writerappender_priv.h
index 752c1c3c..30f52eea 100644
--- a/src/main/include/log4cxx/private/writerappender_priv.h
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -101,6 +101,9 @@ struct WriterAppender::WriterAppenderPriv : public 
AppenderSkeleton::AppenderSke
 #if LOG4CXX_EVENTS_AT_EXIT
        helpers::AtExitRegistry::Raii atExitRegistryRaii;
 #endif
+
+       bool warnedNoWriter = false;
+       bool checkWriter();
 };
 
 }

Reply via email to