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.