Hi Srikanth,

Just because you have a wrapper class does not mean you cannot use a macro. We 
wrap the logger class, and also use macros:

Hopefully this code snippet comes across well enough for you to read it. I've 
simplified the macro a little. But logger is an object of our wrapper class, 
where we have implemented pass thrus for isInfoEnabled (and the others) and 
forcedLog. The important part is the inclusion of __FILE__ and __LINE__. In our 
forcedLog function we process the level passed in (here it is 4) to get the 
log4cxx level (::log4cxx::Level::getInfo()), then we create a Location info 
from the __FILE__ and __LINE__:
::log4cxx::spi::LocationInfo(fileName, NULL, lineNumber)

#define OurLogInfo(logger, message)                             \
        if (logger.isInfoEnabled()) {                                   \
                OurCriticalSectionAutoLocker lock(CLog::GetLock());             
        \
                CLog::logging_stream& buf = CLog::GetGlobalLoggingStream();     
\
                buf << message << std::ends;                    \
                logger.forcedLog(4, buf.str(), __FILE__, __LINE__);             
        \
        }

Hope this helps,
Andy

You wrote: 
=======================
Hi,
I have a question regarding if the following is supported:

o I have wrapper that uses LOG4CXX API to print log messages.  I would like to 
print the messages optionally with the file and line #. 
o Using it this way, prints the file, line number where log4cxx API is invoked 
and NOT where the wrapper was invoked, which is the actual place where the 
message originated.  Note that I cannot use a macro or such for the wrapper.  
It is a class in itself.

o Does LOG4CXX provide the following API
   - Is print the file/line number option enabled ?
   - (If so), set the file/line number provided(which I can pass to the 
wrapper).

Thanks!
--Srikanth

Reply via email to