On Mar 7, 2007, at 10:14 AM, jorrit de vries wrote:

Hello,

I get the following errors every time I use the LOG4CXX_DEBUG macro.

I use the following syntax:
LOG4CXX_DEBUG(logger, "Switching to tool " + (*m_currentTool)->name);

where 'logger' is defined in the class as:
static LoggerPtr logger;

This is the part of the build log I get for the line above:
error C2589: ',' : illegal token on right side of '::'
error C2143: syntax error : missing ')' before '::'
error C2661: 'log4cxx::Logger::forcedLog' : no overloaded function takes 0 arguments
error C2059: syntax error : ')'

Can anybody point me to what I am doing wrong and how I might prevent this error?

Best regards,
Jorrit


log4cxx-0.9.7 is not recommended due to many issues that have been corrected in the SVN. I had hoped to package a new release in the last month or so, but log4j issues kept that from happening. The LOG4CXX_DEBUG macros are defined differently in 0.9.7 and the current SVN head. In 0.9.7, the second argument is a fragment of a stream statement,

#define LOG4CXX_DEBUG(logger, message) { \
        if (logger->isDebugEnabled()) {\
        ::log4cxx::StringBuffer oss; \
        oss << message; \
logger->forcedLog(::log4cxx::Level::DEBUG, oss.str(), __FILE__, __LINE__); }}

So the message parameter needs to be such that

oss << message;

results in a valid statement.  So if you did

LOG4CXX_DEBUG(logger, "Switching to tool");

or

LOG4CXX_DEBUG(logger, "Switching to tool " << (*m_currentTool)->name);

you should be okay.  However:

LOG4CXX_DEBUG(logger, "Switching to tool " + (*m_currentTool)->name);

isn't going to work since there is likely not a matching operator+.

In the current SVN HEAD,

#define LOG4CXX_DEBUG(logger, message) { \
        if (LOG4CXX_UNLIKELY(logger->isDebugEnabled())) {\
logger->forcedLog(::log4cxx::Level::getDebug(), message, LOG4CXX_LOCATION); }}

the message parameter needs to be match one of the prototypes for forcedLog (currently std::string or std::wstring). So you could likely do:

LOG4CXX_DEBUG(logger, std::string("Switching to tool") + (*m_currentTool)->name);

which should also work for log4cxx 0.9.7.



Reply via email to