I have a properties file for log4cxx configuration with a variable name ${name}:
Properties file example:
log4j.rootLogger=INFO, FILE
# FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=./${name}
log4j.appender.FILE.MaxFileSize=16MB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %m%n
How can I set the variable ${name} from my cpp file or cmake file. I tried with the following code but it doesn't work:
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/helpers/properties.h>
using namespace log4cxx;
static LoggerPtr logger(Logger::getLogger(""));
int main() {
PropertyConfigurator::configure("./assets/logger.properties");
#ifndef NDEBUG
logger->setLevel(log4cxx::Level::getDebug());
#endif
return EXIT_SUCCESS;
}
Thanks in advance
Found out the solution: Use setenv from stdlib. Here is the working solution:
#include <stdlib.h> // Include the library
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/helpers/properties.h>
using namespace log4cxx;
static LoggerPtr logger(Logger::getLogger(""));
int main() {
// Set the env variable
// The identifier must be the same as the one in the log4cxx configuration file
setenv("name", "NAME_OF_THE_CURRENT_LOG_FILE", true);
PropertyConfigurator::configure("./assets/logger.properties");
#ifndef NDEBUG
logger->setLevel(log4cxx::Level::getDebug());
#endif
return EXIT_SUCCESS;
}
I hope it was useful not only for me :)