logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Curt Arnold <carn...@apache.org>
Subject Re: LOG4CXX_DEBUG macro fails when used in a shared object or .so file gcc
Date Wed, 13 Oct 2004 06:16:00 GMT
> Can some body tell me what difference does the #define macro for 
> LOG4CXX_DEBUG makes for a shared object to that of
> an executable.
> sample code...
> 1)string str1 = "this is devender ";
> 2)LOG4CXX_DEBUG(loggerx, _T("MSG ") << str1);
> 3)int i = 0;
> 4)LOG4CXX_DEBUG(loggerx, _T("MSG ") << i++);
> I appreciate every body for taking ur precious time in looking at my 
> email.
> Sincierly
> Marri Devender Rao

There have been muiltiple reports of segmentation faults due to the 
initialization order of static constructors when using log4cxx in a 
shared library.  My guess is this could be another manifestation of the 
same problem.  It is on my list of things to investigate.

Please avoid using operator<< with the LOG4CXX_* macros.  Yes you can 
get away with it now, but it depends on undocumented and undesirable 
aspects of the macros that I intend to eliminate when addressing 
http://nagoya.apache.org/jira/browse/LOGCXX-10 (likely 0.9.9).  The _T 
macros are also undesirable and should not be used in new code.

I recently added a stream wrapper for log4cxx (see 
http://nagoya.apache.org/jira/browse/LOGCXX-18) and recent messages on 
the thread.  I think the basic usage patterns are reasonably solid, 
though the implementation needs to be optimized to delay buffer 
allocation until needed.   If you wanted to use it, your code fragment 
would look like:

#include <log4cxx/stream.h>

> string str1 = "this is devender ";
    log4cxx::logstream ls (loggerx, log4cxx::Level::DEBUG);
    ls << "MSG" << str1 << LOG4CXX_ENDMSG;
    int i = 0;
    ls << "MSG" << i++ << LOG4CXX_ENDMSG;

May still run into the segmentation issue, since my guess is that it is 

View raw message