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 2025/12/24 01:49:34 UTC
(logging-log4cxx) branch master updated: Allow the currently executing program file path components to be used in a properties configuration file (#572)
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 fb5fad55 Allow the currently executing program file path components to be used in a properties configuration file (#572)
fb5fad55 is described below
commit fb5fad5537725efed6788e76cc60409d5985e33a
Author: Stephen Webb <st...@ieee.org>
AuthorDate: Wed Dec 24 12:49:29 2025 +1100
Allow the currently executing program file path components to be used in a properties configuration file (#572)
* Make Properties::load additive
---
src/main/cpp/properties.cpp | 7 ++-----
src/test/cpp/autoconfiguretestcase.cpp | 24 ++++++++++++++--------
.../resources/input/autoConfigureTest.properties | 2 +-
3 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/src/main/cpp/properties.cpp b/src/main/cpp/properties.cpp
index dfa72f83..03651006 100644
--- a/src/main/cpp/properties.cpp
+++ b/src/main/cpp/properties.cpp
@@ -442,11 +442,8 @@ LogString Properties::get(const LogString& key) const
void Properties::load(InputStreamPtr inStream)
{
Pool pool;
- auto lineReader = std::make_shared<InputStreamReader>(inStream, CharsetDecoder::getISOLatinDecoder());
- LogString contents = lineReader->read(pool);
- properties->clear();
- PropertyParser parser;
- parser.parse(contents, *this);
+ auto contents = InputStreamReader(inStream, CharsetDecoder::getISOLatinDecoder()).read(pool);
+ PropertyParser().parse(contents, *this);
}
std::vector<LogString> Properties::propertyNames() const
diff --git a/src/test/cpp/autoconfiguretestcase.cpp b/src/test/cpp/autoconfiguretestcase.cpp
index da634bee..df21032f 100644
--- a/src/test/cpp/autoconfiguretestcase.cpp
+++ b/src/test/cpp/autoconfiguretestcase.cpp
@@ -17,6 +17,7 @@
#include "logunit.h"
#include <log4cxx/logger.h>
#include <log4cxx/logmanager.h>
+#include <log4cxx/fileappender.h>
#include <log4cxx/defaultconfigurator.h>
#include <log4cxx/helpers/bytebuffer.h>
#include <log4cxx/helpers/exception.h>
@@ -57,6 +58,7 @@ using namespace log4cxx;
LOGUNIT_CLASS(AutoConfigureTestCase)
{
LOGUNIT_TEST_SUITE(AutoConfigureTestCase);
+ LOGUNIT_TEST(testSetup);
LOGUNIT_TEST(test1);
LOGUNIT_TEST(test2);
LOGUNIT_TEST_SUITE_END();
@@ -90,11 +92,10 @@ public:
void setUp()
{
-#if LOG4CXX_HAS_FILESYSTEM_PATH
- auto fileName = spi::Configurator::properties().getProperty(LOG4CXX_STR("PROGRAM_FILE_PATH.STEM"));
-#else
- LogString fileName = LOG4CXX_STR("autoconfiguretestcase");
+#if !LOG4CXX_HAS_FILESYSTEM_PATH
+ spi::Configurator::properties().setProperty(LOG4CXX_STR("PROGRAM_FILE_PATH.STEM"), LOG4CXX_STR("autoconfiguretestcase"));
#endif
+ auto fileName = spi::Configurator::properties().getProperty(LOG4CXX_STR("PROGRAM_FILE_PATH.STEM"));
auto lsTempDir = helpers::OptionConverter::getSystemProperty(LOG4CXX_STR("TEMP"), LOG4CXX_STR("/tmp"));
copyPropertyFile(lsTempDir, fileName);
DefaultConfigurator::setConfigurationWatchSeconds(1);
@@ -102,11 +103,7 @@ public:
{ lsTempDir
};
std::vector<LogString> names
-#if LOG4CXX_HAS_FILESYSTEM_PATH
{ LOG4CXX_STR("${PROGRAM_FILE_PATH.STEM}.properties")
-#else
- { LOG4CXX_STR("autoconfiguretestcase.properties")
-#endif
};
std::tie(m_status, m_configFile) = DefaultConfigurator::configureFromFile(paths, names);
}
@@ -120,7 +117,16 @@ public:
apr_sleep(200000);
}
- void test1()
+ void testSetup()
+ {
+ auto fa = LOG4CXX_NS::cast<FileAppender>(LogManager::getRootLogger()->getAppender(LOG4CXX_STR("A1")));
+ LOGUNIT_ASSERT(fa);
+ auto fileName = spi::Configurator::properties().getProperty(LOG4CXX_STR("PROGRAM_FILE_PATH.STEM"));
+ File logFile(fa->getFile());
+ LOGUNIT_ASSERT_EQUAL(fileName + LOG4CXX_STR(".log"), logFile.getName());
+ }
+
+ void test1()
{
LOGUNIT_ASSERT_EQUAL(m_status, spi::ConfigurationStatus::Configured);
LOGUNIT_ASSERT(File(m_configFile).exists(m_pool));
diff --git a/src/test/resources/input/autoConfigureTest.properties b/src/test/resources/input/autoConfigureTest.properties
index 1187d130..b91cf129 100644
--- a/src/test/resources/input/autoConfigureTest.properties
+++ b/src/test/resources/input/autoConfigureTest.properties
@@ -16,7 +16,7 @@
log4j.rootCategory=INFO, A1
log4j.appender.A1=org.apache.log4j.FileAppender
-log4j.appender.A1.File=output/autoConfigureTest.log
+log4j.appender.A1.File=output/${PROGRAM_FILE_PATH.STEM}.log
log4j.appender.A1.Append=false
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%m%n