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]);
}

Reply via email to