I changed as said...but still have the same problem..it creates a logfile but no messages in the file...
log4cxx::FileAppenderPtr fileAppender(new log4cxx::FileAppender(log4cxx::LayoutPtr(new log4cxx::SimpleLayout()),log4cxx::helpers::Transcoder::decode(logfile.c_str()),false)); log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("logger"); log4cxx::BasicConfigurator::configure(); logger->setLevel(log4cxx::Level::getAll()); logger->addAppender(fileAppender); logger->info("APPS INITIALIZED"); LOG4CXX_INFO(logger,"IN main method"); logger->trace("tracing"); fileAppender->close(); printf("\n file name : %s","got here"); am i missing something...please let me know... thanks in advance On Tue, Aug 11, 2009 at 8:00 PM, Curt Arnold <carn...@apache.org> wrote: > > 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. > > > > >