logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jacob L. Anawalt" <janaw...@geckosoftware.com>
Subject Re: Major problem with wide vs. normal strings in log messages
Date Fri, 23 May 2008 16:35:25 GMT
Dale King wrote:
> On Thu, May 22, 2008 at 7:55 PM, Jacob L. Anawalt
> <janawalt@geckosoftware.com> wrote:
>> I get the same error if I write a wide
>> string to std::cout via <<.
> Not exactly. For std::cout all of the wide strings would print out as
> the address, not just some of them.

Right, all uses of std::cout would, and all uses of std::wcout would not. All 
uses of LOG4CXX_* macros that choose the narrow buffer override would, and all 
that choose the wide buffer override would not.

LOG4CXX_TRACE( logger, L"1" << L"2" << "3" << "4" );
std::wcout << L"1" << L"2" << "3" << "4";

LOG4CXX_TRACE( logger, 1 << L"2" << "3" << L"4" );
std::cout << 1 << L"2" << "3" << L"4";

I am pleased with how the insertion operator works with log4cxx macros in the 
code I have used it in. The function overloads appear to be efficient and have 
done the right thing. You bring up a case where they might not do what is 
expected, and the problem may not be immediately obvious.

std::string v1; // or some object that makes the LOG4CXX macro not go wide.
std::wstring v1;
LOG4CXX_TRACE( logger, v1 << v2);

The src/main/include/log4cxx/helpers/tchar.h file gives some background and 
suggestions for using one character type or another. Reading through it and the 
other headers it references I am tempted to prefer a WLOG4CXX_* macro that 
forces the use of only wide streams in log4cxx if I knew my app would be using 
wide and narrow strings. Less typing :).

Hopefully this discussion results in a wiki page and later documentation with 
'best practice' examples.

Jacob Anawalt
Gecko Software, Inc.

View raw message