On Aug 11, 2009, at 2:12 PM, ss ak wrote:
string logfile = "logfile1.log";
printf("\n in main () ");
log4cxx::FileAppenderPtr fileAppender = new
log4cxx::FileAppender(log4cxx::LayoutPtr(new
log4cxx
::SimpleLayout
()),log4cxx::helpers::Transcoder::decode(logfile.c_str()),false);
log4cxx::helpers::Pool p;
fileAppender->activateOptions(p);
printf(
"\n second printf");
log4cxx::BasicConfigurator::configure();
//configure(log4cxx::AppenderPtr(fileAppender));
log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("logger");
logger->setLevel(log4cxx::Level::getAll());
logger->addAppender(fileAppender);
LOG4CXX_INFO(logger,"IN main method");
Now the file is created but does not write anything into it....
or does not print "second printf"
the program just aborts,after creating the file...
please help..i need this to be done today........thanks....
You don't mention the platform, guessing Windows. There is the
possibility of shutting down Apache Portable Runtime before shutting
down log4cxx if the first thing you do is to create a Ptr without
initializing it. I wanted to avoid the cost of checking for APR
startup in every Ptr constructor, but it seems like this hits a lot of
people. Probably should go ahead and change that and take any
performance hit.
The main thing is to do:
FileAppenderPtr fileAppender(new FileAppender...)
instead of
FileAppenderPtr fileAppender = new Appender...
The first constructs the FileAppender first then initializes the
pointer. The other constructs the pointer first then the
FileAppender. Since destruction happens in reverse order of
construction, you want to construct the FileAppender first.
---------- Forwarded message ----------
From: ss ak <ssa...@gmail.com>
Date: Tue, Aug 11, 2009 at 9:43 AM
Subject: logString issue...please help
To: log4cxx-user@logging.apache.org
string logfile = "logfile.log";
log4cxx::helpers::Transcoder::decode("logfile.log",12,logstr);
log4cxx::BasicConfigurator::configure();
log4cxx::FileAppenderPtr fileAppender(new log4cxx::FileAppender());
//log4cxx::Layout(new log4cxx::SimpleLayout())));
fileAppender->setAppend(true);
fileAppender->setFile(logfile.c_str());
logger->setLevel(log4cxx::Level::getAll());
logger->addAppender(fileAppender);
I get this error...please help
error C2664: 'void log4cxx::FileAppender::setFile(const
log4cxx::LogString &)' : cannot convert parameter 1 from 'const char
*' to 'const log4cxx::LogString &'
1> Reason: cannot convert from 'const char *' to 'const
log4cxx::LogString'
1> No constructor could take the source type, or constructor
overload resolution was ambiguous
1
string logfile = "logfile.log";
log4cxx::helpers::Transcoder::decode("logfile.log",12,logstr);
log4cxx::BasicConfigurator::configure();
log4cxx::FileAppenderPtr fileAppender(new log4cxx::FileAppender());
//log4cxx::Layout(new log4cxx::SimpleLayout())));
fileAppender->setAppend(true);
fileAppender->setFile(logfile.c_str());
logger->setLevel(log4cxx::Level::getAll());
logger->addAppender(fileAppender);
If all you wanted to do is explicitly set the file name, you should
have done:
fileAppender->setFile(LOG4CXX_STR("logfile.log"));
As long as the constant only contains ASCII characters it will use
either the proper type of literal or do a transcoding.