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>