Hi,
I am using the latest log4cxx library (0.10.0) on Debian (log4cxx10-dev)
and find that any application I use with this library will result in the
following valgrind errors: http://pastebin.com/ypt4ZH4i
If I strip log4cxx out of the source and re-run valgrind, it will pass
without any errors.
Am I using the library wrong or is there an issue with the underlying
implementation?
Sample usage:
void Log::toConsole(Level level)
{
log4cxx::ConsoleAppenderPtr consoleAppender(new
log4cxx::ConsoleAppender());
consoleAppender->setLayout(new
log4cxx::PatternLayout(LOG_OUTPUT_FORMAT));
log4cxx::helpers::Pool pool;
consoleAppender->activateOptions(pool);
consoleAppender->setThreshold(LOG_LEVEL_LOOKUP[level]);
log4cxx::Logger::getRootLogger()->addAppender(consoleAppender);
}
void Log::toFile(std::string log_path, Level level, bool append, bool
rotate, unsigned int max_backups, int max_size)
{
if (log_path.empty())
throw LoggerException("Log filepath cannot be empty.");
if (rotate) {
log4cxx::RollingFileAppenderPtr rollingFileAppender(new
log4cxx::RollingFileAppender());
rollingFileAppender->setLayout(new
log4cxx::PatternLayout(LOG_OUTPUT_FORMAT));
rollingFileAppender->setFile(log_path);
rollingFileAppender->setAppend(append);
rollingFileAppender->setMaxBackupIndex(max_backups);
rollingFileAppender->setMaximumFileSize(max_size);
log4cxx::helpers::Pool pool;
rollingFileAppender->activateOptions(pool);
rollingFileAppender->setThreshold(LOG_LEVEL_LOOKUP[level]);
log4cxx::Logger::getRootLogger()->addAppender(rollingFileAppender);
} else {
log4cxx::FileAppenderPtr fileAppender(new log4cxx::FileAppender());
fileAppender->setLayout(new
log4cxx::PatternLayout(LOG_OUTPUT_FORMAT));
fileAppender->setFile(log_path);
fileAppender->setAppend(append);
fileAppender->setThreshold(LOG_LEVEL_LOOKUP[level]);
log4cxx::Logger::getRootLogger()->addAppender(fileAppender);
}
}
void Log::setLevel(Level level)
{
log4cxx::Logger::getRootLogger()->setLevel(LOG_LEVEL_LOOKUP[level]);
}