I have created a sample application with log4cxx and it works great.
=====================================================
#include <log4cxx/logger.h>
#include <log4cxx/xml/domconfigurator.h>
using namespace log4cxx;
using namespace log4cxx::xml;
using namespace log4cxx::helpers;
// Define static logger variable
LoggerPtr loggerMyMain(Logger::getLogger( "main"));
LoggerPtr loggerFunctionA(Logger::getLogger( "functionA"));
void functionA()
{
LOG4CXX_INFO(loggerFunctionA, "Executing functionA.");
}
int main()
{
int value = 5;
// Load XML configuration file using DOMConfigurator
DOMConfigurator::configure("Log4cxxConfig.xml");
LOG4CXX_TRACE(loggerMyMain, "this is a debug message for detailed code
discovery. Value=" << value);
LOG4CXX_DEBUG(loggerMyMain, "this is a debug message.");
LOG4CXX_INFO (loggerMyMain, "this is a info message, ignore. Value=" <<
value);
LOG4CXX_WARN (loggerMyMain, "this is a warn message, not too bad.");
LOG4CXX_ERROR(loggerMyMain, "this is a error message, something serious is
happening.");
LOG4CXX_FATAL(loggerMyMain, "this is a fatal message!!!");
functionA();
return 0;
}
=============================================================================
Requirement in our application was to create a wrapper around log4cxx
functionality, so that in future any other logging functionality can be used
instead of log4cxx.
For that, we created a component, wrapping log4cxx functionality using
software component architecture (sca) framework.
a. This wrapper component is loaded by other components or other applications
b. Component method, initialize() is called with the filename argument (xml
properties filename )
c. Component passes the argument to DOM configurator.
Issue:
File name passed from component to DOM configurator never gets
passed and following is the error inside log4cxx.
"log4cxx: Could not open file [ ] "
We could observe this by setting "LogLog::setInternalDebugging( true );"
(in sample application, file name is printed instead of [] and works fine)
Which means parameter we are passing from our wrapper component to logging
framework is failing. We have tried by passing wstring, string, passing hard
coded value, declaring a string variable and passing that variable....but the
result is the same, does't work. We have even tried Configuring using other
overloaded "configureAndWatch" functions.
a. Void ConfigureAndWatch(filename)
Static Methods
b. Void configureAnd Watch(filename, delay)
c. Void doConfigure(filename, hierarchy) ---------- Public method
We were successful in logging with
BasicConfigurator::configure() method only (but this does not accept any
configuration filename as argument)
Any help in fixing the issue is greatly appreciated.