Hey *,

I have found the following two lines of code to adapt an existing
FileAppender:

 

Appender* appender = Logger::getRootLogger()->getAppender
("RollingFile");
FileAppender* fa = dynamic_cast<FileAppender*>(appender);

 

But when I try to implement this functionylity in my method I get always
an dynamic_cast exception, here is my code snippet:

 

std::string errorLogFile = "test.log";

const log4cxx::LogString rootLoggerFileAppenderName =
LOG4CXX_STR("RootLoggerFileAppender"); 

...

std::wstring logFilePathName(errorLogFile.begin(), errorLogFile.end());

log4cxx::Appender* rootFileAppender =
log4cxx::Logger::getRootLogger()->getAppender(rootLoggerFileAppenderName
);

if(rootFileAppender == 0 || rootFileAppender == NULL)

{

      log4cxx::LogString logStringFormat = LOG4CXX_STR("[%-5p] - %m%n");

      log4cxx::LayoutPtr layout(new
log4cxx::PatternLayout(logStringFormat));

      rootFileAppender = new log4cxx::FileAppender(layout,
logFilePathName, true);

      rootFileAppender->setName(LOG4CXX_STR("RollingFile"));

      log4cxx::Logger::getRootLogger()->addAppender(rootFileAppender);}

 

/* the following dynamic_cast throws an exception */

try

{

 
dynamic_cast<log4cxx::FileAppender*>(rootFileAppender)->setFile(logFileP
athName);

}

catch(...)

{

 
log4cxx::Logger::getRootLogger()->removeAppender(rootLoggerFileAppenderN
ame);

      log4cxx::BasicConfigurator::configure();

      LOG4CXX_ERROR(m_logger, "FileAppender couldn't be configured for
root logger, invalid log file specified: " << errorLogFile);

      LOG4CXX_ERROR(m_logger, "A ConsoleAppender was added to the root
logger instead of the FileAppender.");

      return 1;

}

 

Where is my bug?

 

Thanks for any respons

Markus

Reply via email to