Search code examples
configuration-fileslog4cplus

Log4cplus setproperty function usage


I use the following configuration for my logger, in the conf file :

log4cplus.appender.TestLogAppender = log4cplus::TimeBasedRollingFileAppender
log4cplus.appender.TestLogAppender.FilenamePattern = %d{yyyyMMdd}.log
log4cplus.appender.TestLogAppender.MaxHistory = 365
log4cplus.appender.TestLogAppender.Schedule = DAILY
log4cplus.appender.TestLogAppender.RollOnClose = false
log4cplus.appender.TestLogAppender.layout = log4cplus::PatternLayout
log4cplus.appender.TestLogAppender.layout.ConversionPattern = %m%n

And in my code, I have the following initializing function for my logger, in which first, I load the configuration file, and then I wish to set the 'FilenamePattern' property to a new value, so that when I run multiple applications, each application will write to it's own log file:

void InitLogger()
{
  ProperyConfigurator::doConfigure (L"LogConf.conf");
  helpers:Properties prop(L"LogConf.conf");
  props.setPropery(L"log4cplus.appender.TestLogAppender.FilenamePattern" , 
  "Log/AppLogName.log.%d{yyyy-MM-dd}");
}

The problem is that when I run even one application, the log messages are written to the file as given in the original configuration file (in the 'FilenamePattern' property). It seems the 'setproperty' didn't set the new value I gave it.

Is there a problem with my initializing logger function? Have I used the setProperty method wrong?


Solution

  • You are obviously changing the properties after you have already configured the system, so your changes will be ignored. Do this instead:

    helpers:Properties props(L"LogConf.conf");
    props.setPropery(L"log4cplus.appender.TestLogAppender.FilenamePattern" , 
      "Log/AppLogName.log.%d{yyyy-MM-dd}");
    ProperyConfigurator propConf (props);
    propConf.configure();