You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2026/09/18 04:00:04 UTC

(logging-log4cxx) branch master updated: Log a 'Unknown option ...' warning for an obsolete/incorrect configuration file item (#738)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new a0c19806 Log a 'Unknown option ...' warning for an obsolete/incorrect configuration file item (#738)
a0c19806 is described below

commit a0c19806a38f074150dadbeffe18f1f558d4c0b3
Author: Stephen Webb <st...@ieee.org>
AuthorDate: Fri Sep 18 13:59:58 2026 +1000

    Log a 'Unknown option ...' warning for an obsolete/incorrect configuration file item (#738)
    
    * Remove 'LocationInfo' property from AsyncAppender
    
    * Remove 'LocationInfo' property from AsyncAppender tests
---
 src/main/cpp/appenderskeleton.cpp               |  2 ++
 src/main/cpp/asyncappender.cpp                  | 11 ++++++++---
 src/main/cpp/fallbackerrorhandler.cpp           |  3 ++-
 src/main/cpp/filter.cpp                         |  3 ++-
 src/main/cpp/filterbasedtriggeringpolicy.cpp    |  3 ++-
 src/main/cpp/fmtlayout.cpp                      |  2 ++
 src/main/cpp/htmllayout.cpp                     |  2 ++
 src/main/cpp/jsonlayout.cpp                     |  2 ++
 src/main/cpp/levelmatchfilter.cpp               |  2 ++
 src/main/cpp/levelrangefilter.cpp               |  2 ++
 src/main/cpp/locationinfofilter.cpp             |  2 ++
 src/main/cpp/loggermatchfilter.cpp              |  2 ++
 src/main/cpp/manualtriggeringpolicy.cpp         |  3 ++-
 src/main/cpp/mapfilter.cpp                      |  2 ++
 src/main/cpp/onlyonceerrorhandler.cpp           |  3 ++-
 src/main/cpp/optionhandler.cpp                  |  6 ++++++
 src/main/cpp/patternlayout.cpp                  |  2 ++
 src/main/cpp/rollingpolicybase.cpp              |  2 ++
 src/main/cpp/sizebasedtriggeringpolicy.cpp      |  2 ++
 src/main/cpp/stringmatchfilter.cpp              |  2 ++
 src/main/cpp/syslogappender.cpp                 |  8 --------
 src/main/cpp/xmllayout.cpp                      |  2 ++
 src/main/include/log4cxx/asyncappender.h        |  5 ++++-
 src/main/include/log4cxx/fmtlayout.h            |  8 ++++++++
 src/main/include/log4cxx/spi/optionhandler.h    |  3 +--
 src/test/cpp/asyncappendertestcase.cpp          |  1 -
 src/test/resources/input/xml/asyncAppender1.xml |  1 -
 27 files changed, 65 insertions(+), 21 deletions(-)

diff --git a/src/main/cpp/appenderskeleton.cpp b/src/main/cpp/appenderskeleton.cpp
index a23ec9c0..7fe56883 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -217,6 +217,8 @@ void AppenderSkeleton::setOption(const LogString& option,
 		m_priv->exceptionTriggeringMessage = value;
 	}
 #endif
+	else
+		Appender::setOption(option, value);
 }
 
 const spi::ErrorHandlerPtr AppenderSkeleton::getErrorHandler() const
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index d2ec3d36..e640b9ae 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -278,11 +278,12 @@ struct AsyncAppender::AsyncAppenderPriv : public AppenderSkeleton::AppenderSkele
 
 	void close();
 
+#if LOG4CXX_ABI_VERSION <= 15
 	/**
 	 * Should location info be included in dispatched messages.
 	*/
 	bool locationInfo{ true };
-
+#endif
 	/**
 	 * Does appender block when buffer is full.
 	*/
@@ -348,17 +349,19 @@ void AsyncAppender::addAppender(const AppenderPtr newAppender)
 void AsyncAppender::setOption(const LogString& option,
 	const LogString& value)
 {
+#if LOG4CXX_ABI_VERSION <= 15
 	if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("LOCATIONINFO"), LOG4CXX_STR("locationinfo")))
 	{
 		setLocationInfo(OptionConverter::toBoolean(value, false));
 	}
-
+	else
+#endif
 	if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFERSIZE"), LOG4CXX_STR("buffersize")))
 	{
 		setBufferSize(OptionConverter::toInt(value, DEFAULT_BUFFER_SIZE));
 	}
 
-	if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BLOCKING"), LOG4CXX_STR("blocking")))
+	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BLOCKING"), LOG4CXX_STR("blocking")))
 	{
 		setBlocking(OptionConverter::toBoolean(value, true));
 	}
@@ -529,6 +532,7 @@ void AsyncAppender::replaceAppenders( const AppenderList& newList)
 	priv->appenders.replaceAppenders(newList);
 }
 
+#if LOG4CXX_ABI_VERSION <= 15
 bool AsyncAppender::getLocationInfo() const
 {
 	return priv->locationInfo;
@@ -538,6 +542,7 @@ void AsyncAppender::setLocationInfo(bool flag)
 {
 	priv->locationInfo = flag;
 }
+#endif
 
 void AsyncAppender::setBufferSize(int size)
 {
diff --git a/src/main/cpp/fallbackerrorhandler.cpp b/src/main/cpp/fallbackerrorhandler.cpp
index 8a1652e8..98cf4af1 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -174,8 +174,9 @@ void FallbackErrorHandler::activateOptions(Pool&)
 }
 #endif
 
-void FallbackErrorHandler::setOption(const LogString&, const LogString&)
+void FallbackErrorHandler::setOption(const LogString& option, const LogString& value)
 {
+	ErrorHandler::setOption(option, value);
 }
 
 bool FallbackErrorHandler::errorReported() const
diff --git a/src/main/cpp/filter.cpp b/src/main/cpp/filter.cpp
index 39e63a8d..5a9e838d 100644
--- a/src/main/cpp/filter.cpp
+++ b/src/main/cpp/filter.cpp
@@ -49,7 +49,8 @@ void Filter::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
 }
 
-void Filter::setOption(const LogString&, const LogString&)
+void Filter::setOption(const LogString& option, const LogString& value)
 {
+	OptionHandler::setOption(option, value);
 }
 
diff --git a/src/main/cpp/filterbasedtriggeringpolicy.cpp b/src/main/cpp/filterbasedtriggeringpolicy.cpp
index 4a52aac5..0d77c881 100644
--- a/src/main/cpp/filterbasedtriggeringpolicy.cpp
+++ b/src/main/cpp/filterbasedtriggeringpolicy.cpp
@@ -119,8 +119,9 @@ void FilterBasedTriggeringPolicy::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORM
 	}
 }
 
-void FilterBasedTriggeringPolicy::setOption(const LogString& /* option */, const LogString& /* value */ )
+void FilterBasedTriggeringPolicy::setOption(const LogString& option, const LogString& value )
 {
+	TriggeringPolicy::setOption(option, value);
 }
 
 
diff --git a/src/main/cpp/fmtlayout.cpp b/src/main/cpp/fmtlayout.cpp
index 719bf44e..80b9e645 100644
--- a/src/main/cpp/fmtlayout.cpp
+++ b/src/main/cpp/fmtlayout.cpp
@@ -79,6 +79,8 @@ void FMTLayout::setOption(const LogString& option, const LogString& value)
 	{
 		m_priv->conversionPattern = helpers::OptionConverter::convertSpecialChars(value);
 	}
+	else
+		Layout::setOption(option, value);
 }
 
 void FMTLayout::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
diff --git a/src/main/cpp/htmllayout.cpp b/src/main/cpp/htmllayout.cpp
index 6ceed459..67e9c485 100644
--- a/src/main/cpp/htmllayout.cpp
+++ b/src/main/cpp/htmllayout.cpp
@@ -79,6 +79,8 @@ void HTMLLayout::setOption(const LogString& option,
 		setLocationInfo(OptionConverter::toBoolean(value, false));
 		m_priv->expectedPatternLength = priv::doubledLayoutSize(getFormattedEventCharacterCount());
 	}
+	else
+		Layout::setOption(option, value);
 }
 
 void HTMLLayout::format( LOG4CXX_FORMAT_LAYOUT_FORMAL_PARAMETERS ) const
diff --git a/src/main/cpp/jsonlayout.cpp b/src/main/cpp/jsonlayout.cpp
index 9de7705e..100b4b8c 100644
--- a/src/main/cpp/jsonlayout.cpp
+++ b/src/main/cpp/jsonlayout.cpp
@@ -127,6 +127,8 @@ void JSONLayout::setOption(const LogString& option, const LogString& value)
 	{
 		setPrettyPrint(OptionConverter::toBoolean(value, false));
 	}
+	else
+		Layout::setOption(option, value);
 }
 
 void JSONLayout::format( LOG4CXX_FORMAT_LAYOUT_FORMAL_PARAMETERS ) const
diff --git a/src/main/cpp/levelmatchfilter.cpp b/src/main/cpp/levelmatchfilter.cpp
index a927b216..a1372fc9 100644
--- a/src/main/cpp/levelmatchfilter.cpp
+++ b/src/main/cpp/levelmatchfilter.cpp
@@ -61,6 +61,8 @@ void LevelMatchFilter::setOption(const LogString& option,
 	{
 		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
+	else
+		Filter::setOption(option, value);
 }
 
 void LevelMatchFilter::setLevelToMatch(const LogString& levelToMatch1)
diff --git a/src/main/cpp/levelrangefilter.cpp b/src/main/cpp/levelrangefilter.cpp
index 732aeca5..1082fe54 100644
--- a/src/main/cpp/levelrangefilter.cpp
+++ b/src/main/cpp/levelrangefilter.cpp
@@ -72,6 +72,8 @@ void LevelRangeFilter::setOption(const LogString& option,
 	{
 		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
+	else
+		Filter::setOption(option, value);
 }
 
 Filter::FilterDecision LevelRangeFilter::decide(
diff --git a/src/main/cpp/locationinfofilter.cpp b/src/main/cpp/locationinfofilter.cpp
index e83c1531..d0b172fa 100644
--- a/src/main/cpp/locationinfofilter.cpp
+++ b/src/main/cpp/locationinfofilter.cpp
@@ -75,6 +75,8 @@ void LocationInfoFilter::setOption(  const LogString& option,
 		LOG4CXX_ENCODE_CHAR(sName, value);
 		priv->methodName = sName;
 	}
+	else
+		Filter::setOption(option, value);
 }
 
 Filter::FilterDecision LocationInfoFilter::decide(
diff --git a/src/main/cpp/loggermatchfilter.cpp b/src/main/cpp/loggermatchfilter.cpp
index 113bc253..afddd8ef 100644
--- a/src/main/cpp/loggermatchfilter.cpp
+++ b/src/main/cpp/loggermatchfilter.cpp
@@ -73,6 +73,8 @@ void LoggerMatchFilter::setOption(const LogString& option,
 	{
 		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
+	else
+		Filter::setOption(option, value);
 }
 
 Filter::FilterDecision LoggerMatchFilter::decide(
diff --git a/src/main/cpp/manualtriggeringpolicy.cpp b/src/main/cpp/manualtriggeringpolicy.cpp
index 1fff5242..3557320f 100644
--- a/src/main/cpp/manualtriggeringpolicy.cpp
+++ b/src/main/cpp/manualtriggeringpolicy.cpp
@@ -41,6 +41,7 @@ void ManualTriggeringPolicy::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PA
 {
 }
 
-void ManualTriggeringPolicy::setOption(const LogString& /* option */, const LogString& /* value */ )
+void ManualTriggeringPolicy::setOption(const LogString& option, const LogString& value )
 {
+	TriggeringPolicy::setOption(option, value);
 }
diff --git a/src/main/cpp/mapfilter.cpp b/src/main/cpp/mapfilter.cpp
index e1eb0710..cd0a09af 100644
--- a/src/main/cpp/mapfilter.cpp
+++ b/src/main/cpp/mapfilter.cpp
@@ -63,6 +63,8 @@ void MapFilter::setOption(  const LogString& option,
 	{
 		priv->keyVals[option] = value;
 	}
+	else
+		Filter::setOption(option, value);
 }
 
 Filter::FilterDecision MapFilter::decide(
diff --git a/src/main/cpp/onlyonceerrorhandler.cpp b/src/main/cpp/onlyonceerrorhandler.cpp
index b0944991..0e76f1bc 100644
--- a/src/main/cpp/onlyonceerrorhandler.cpp
+++ b/src/main/cpp/onlyonceerrorhandler.cpp
@@ -47,8 +47,9 @@ void OnlyOnceErrorHandler::activateOptions(Pool&)
 }
 #endif
 
-void OnlyOnceErrorHandler::setOption(const LogString&, const LogString&)
+void OnlyOnceErrorHandler::setOption(const LogString& option, const LogString& value)
 {
+	ErrorHandler::setOption(option, value);
 }
 
 void OnlyOnceErrorHandler::error(const LogString& message, const std::exception& e,
diff --git a/src/main/cpp/optionhandler.cpp b/src/main/cpp/optionhandler.cpp
index 936cccdd..5134d0d2 100644
--- a/src/main/cpp/optionhandler.cpp
+++ b/src/main/cpp/optionhandler.cpp
@@ -16,6 +16,7 @@
  */
 #include <log4cxx/spi/optionhandler.h>
 #include <log4cxx/helpers/pool.h>
+#include <log4cxx/helpers/loglog.h>
 
 using namespace LOG4CXX_NS;
 
@@ -33,3 +34,8 @@ void spi::OptionHandler::activateOptions(helpers::Pool&)
 	activateOptions();
 }
 #endif
+
+void spi::OptionHandler::setOption(const LogString& option, const LogString& value)
+{
+	helpers::LogLog::warn(LOG4CXX_STR("Unknown option ") + option);
+}
\ No newline at end of file
diff --git a/src/main/cpp/patternlayout.cpp b/src/main/cpp/patternlayout.cpp
index 5ecc6db5..06403e07 100644
--- a/src/main/cpp/patternlayout.cpp
+++ b/src/main/cpp/patternlayout.cpp
@@ -164,6 +164,8 @@ void PatternLayout::setOption(const LogString& option, const LogString& value)
 											LOG4CXX_STR("tracecolor"))){
 		m_priv->m_traceColor = value;
 	}
+	else
+		Layout::setOption(option, value);
 }
 
 void PatternLayout::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
diff --git a/src/main/cpp/rollingpolicybase.cpp b/src/main/cpp/rollingpolicybase.cpp
index bb951e65..ec137529 100644
--- a/src/main/cpp/rollingpolicybase.cpp
+++ b/src/main/cpp/rollingpolicybase.cpp
@@ -82,6 +82,8 @@ void RollingPolicyBase::setOption(const LogString& option, const LogString& valu
 	{
 		m_priv->createIntermediateDirectories = OptionConverter::toBoolean(value, false);
 	}
+	else
+		RollingPolicy::setOption(option, value);
 }
 
 void RollingPolicyBase::setFileNamePattern(const LogString& fnp)
diff --git a/src/main/cpp/sizebasedtriggeringpolicy.cpp b/src/main/cpp/sizebasedtriggeringpolicy.cpp
index 61c7faee..34938604 100644
--- a/src/main/cpp/sizebasedtriggeringpolicy.cpp
+++ b/src/main/cpp/sizebasedtriggeringpolicy.cpp
@@ -60,4 +60,6 @@ void SizeBasedTriggeringPolicy::setOption(const LogString& option, const LogStri
 	{
 		maxFileSize = OptionConverter::toFileSize(value, 10 * 1024 * 1024);
 	}
+	else
+		TriggeringPolicy::setOption(option, value);
 }
diff --git a/src/main/cpp/stringmatchfilter.cpp b/src/main/cpp/stringmatchfilter.cpp
index 5e354127..4f2573d2 100644
--- a/src/main/cpp/stringmatchfilter.cpp
+++ b/src/main/cpp/stringmatchfilter.cpp
@@ -62,6 +62,8 @@ void StringMatchFilter::setOption(const LogString& option,
 	{
 		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
+	else
+		Filter::setOption(option, value);
 }
 
 Filter::FilterDecision StringMatchFilter::decide(
diff --git a/src/main/cpp/syslogappender.cpp b/src/main/cpp/syslogappender.cpp
index 9d944b00..426929b8 100644
--- a/src/main/cpp/syslogappender.cpp
+++ b/src/main/cpp/syslogappender.cpp
@@ -408,16 +408,8 @@ int SyslogAppender::getFacility(
 
 void SyslogAppender::append( LOG4CXX_APPEND_FORMAL_PARAMETERS )
 {
-	if  (!isAsSevereAsThreshold(event->getLevel()))
-	{
-		return;
-	}
-
 	LogString msg;
-	std::string encoded;
 	_priv->layout->format(msg, event);
-
-	Transcoder::encode(msg, encoded);
 	auto packets = detail::splitSyslogPackets(msg, static_cast<size_t>(_priv->maxMessageLength));
 	if (packets.empty() && !msg.empty())
 	{
diff --git a/src/main/cpp/xmllayout.cpp b/src/main/cpp/xmllayout.cpp
index e56c0de3..c50ed7ff 100644
--- a/src/main/cpp/xmllayout.cpp
+++ b/src/main/cpp/xmllayout.cpp
@@ -73,6 +73,8 @@ void XMLLayout::setOption(const LogString& option,
 		setProperties(OptionConverter::toBoolean(value, false));
 		m_priv->expectedPatternLength = priv::doubledLayoutSize(getFormattedEventCharacterCount());
 	}
+	else
+		Layout::setOption(option, value);
 }
 
 void XMLLayout::format( LOG4CXX_FORMAT_LAYOUT_FORMAL_PARAMETERS ) const
diff --git a/src/main/include/log4cxx/asyncappender.h b/src/main/include/log4cxx/asyncappender.h
index 9ba6b520..20c01d79 100644
--- a/src/main/include/log4cxx/asyncappender.h
+++ b/src/main/include/log4cxx/asyncappender.h
@@ -157,10 +157,12 @@ class LOG4CXX_EXPORT AsyncAppender :
 		*/
 		AppenderPtr getAppender(const LogString& name) const override;
 
+#if LOG4CXX_ABI_VERSION <= 15
 		/**
 		 * The current value of the (unused) <b>LocationInfo</b> option.
 		*/
 		bool getLocationInfo() const;
+#endif
 		/**
 		* Determines if specified appender is attached.
 		* @param appender appender.
@@ -199,13 +201,14 @@ class LOG4CXX_EXPORT AsyncAppender :
 		 */
 		void replaceAppenders(const AppenderList& newList) LOG4CXX_16_VIRTUAL_SPECIFIER;
 
+#if LOG4CXX_ABI_VERSION <= 15
 		/**
 		* The <b>LocationInfo</b> attribute is provided for compatibility
 		* with log4j and has no effect on the log output.
 		* @param flag new value.
 		*/
 		void setLocationInfo(bool flag);
-
+#endif
 		/**
 		* Use \c newSize (a non-negative integer value) for
 		* the number of [logging events](@ref spi::LoggingEvent) the ring buffer can hold.
diff --git a/src/main/include/log4cxx/fmtlayout.h b/src/main/include/log4cxx/fmtlayout.h
index c9cf0175..454f43de 100644
--- a/src/main/include/log4cxx/fmtlayout.h
+++ b/src/main/include/log4cxx/fmtlayout.h
@@ -63,6 +63,14 @@ namespace LOG4CXX_NS
  *  </tr>
  *  <tr>
  *      <td align="center">
+ *        <p><strong>d</strong></p>
+ *      </td>
+ *      <td>
+ *          Use {d:%Y-%m-%d %H:%M:%S} to output date and time.
+ *      </td>
+ *  </tr>
+ *  <tr>
+ *      <td align="center">
  *          <p><strong>C</strong></p>
  *          <p><strong>class</strong></p>
  *      </td>
diff --git a/src/main/include/log4cxx/spi/optionhandler.h b/src/main/include/log4cxx/spi/optionhandler.h
index 3841452f..ef002213 100644
--- a/src/main/include/log4cxx/spi/optionhandler.h
+++ b/src/main/include/log4cxx/spi/optionhandler.h
@@ -78,8 +78,7 @@ class LOG4CXX_EXPORT OptionHandler : public virtual helpers::Object
 		other may be activated only when #activateOptions is
 		called.
 		*/
-		virtual void setOption(const LogString& option,
-			const LogString& value) = 0;
+		virtual void setOption(const LogString& option, const LogString& value);
 
 }; // class OptionConverter
 }  // namespace spi
diff --git a/src/test/cpp/asyncappendertestcase.cpp b/src/test/cpp/asyncappendertestcase.cpp
index a2db6133..554bb5ff 100644
--- a/src/test/cpp/asyncappendertestcase.cpp
+++ b/src/test/cpp/asyncappendertestcase.cpp
@@ -666,7 +666,6 @@ class AsyncAppenderTestCase : public AppenderSkeletonTestCase
 			LOGUNIT_ASSERT(asyncAppender);
 			LOGUNIT_ASSERT_EQUAL(100, asyncAppender->getBufferSize());
 			LOGUNIT_ASSERT_EQUAL(false, asyncAppender->getBlocking());
-			LOGUNIT_ASSERT_EQUAL(true, asyncAppender->getLocationInfo());
 			auto nestedAppenders = asyncAppender->getAllAppenders();
 			LOGUNIT_ASSERT_EQUAL(1, int(nestedAppenders.size()));
 
diff --git a/src/test/resources/input/xml/asyncAppender1.xml b/src/test/resources/input/xml/asyncAppender1.xml
index 3ad3afcb..f2b9d7ca 100644
--- a/src/test/resources/input/xml/asyncAppender1.xml
+++ b/src/test/resources/input/xml/asyncAppender1.xml
@@ -25,7 +25,6 @@
   <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
     <param name="BufferSize" value="100"/>
     <param name="Blocking" value="false"/>
-    <param name="LocationInfo" value="true"/>
     <appender-ref ref="VECTOR"/>
   </appender>