On Feb 1, 2005, at 11:54 PM, Martin Lechner wrote:
Hello Curt,
Thanks for the info and tips. I can live with the \u representation for the moment, when I know that there will be readable output in the future.
But I have another small question: I am currently replacing in an application std::string with std::wstring Before it was possible to log in streams, but with wstrings its not possible at the moment.
works: LOG4CXX_DEBUG(loggerPtr_, "hello" << someString << 5 ); works not: LOG4CXX_DEBUG(loggerPtr_, L"hello" << someWtring << 5 );
Is this planned or do I have to use other ways to log things like this?
With the current CVS HEAD, neither is acceptable The log4cxx 0.9.7 macros were forced to create a stream to support this syntax even if the argument was just a char* or std::string.
The current CVS's provides a stream wrapper for logging in <log4cxx/stream.h>. The logstream class provides STL stream-like semantics on top of a logger. The implementation supports short-circuiting expressions when the level is not enabled. Due to the non-atomic nature of stream operations, logstream is not thread-safe (and can't be made so), so do not share it between threads. The expected usage pattern is to have a static LoggerPtr as a class member and logstream wrappers to be created on method entry. In addition, you can insert either wchar_t or char strings into logstream, it will transcode on the fly.
There is a sample in examples/stream.cpp and unit tests in tests/src/streamtestcase.cpp. Your code fragment would should look something like:
#include <log4cxx/stream.h>
class MyClass {
private static log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("MyClass"));
public doSomething() {
log4cxx::logstream logstream(logger, log4cxx::Level::DEBUG);logstream << L"hello" << someWstring << 5 << LOG4CXX_ENDMSG;
} }
There has been a substantial amount of debate on the topic and still profoundly different opinions on the desirable semantics which I do not think can be reconciled in one implementation. I don't expect that the semantics of log4cxx::logstream will change, but am open to implementation improvements and am willing to consider including other implementations, but I think we need to gather more experience and have more platforms to test before doing that. You may want to review the list dev archives and/or the Jira entry (http://issues.apache.org/jira/browse/LOGCXX-18)
