logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dale King" <dalewk...@gmail.com>
Subject Re: Major problem with wide vs. normal strings in log messages
Date Fri, 23 May 2008 17:43:54 GMT
On Fri, May 23, 2008 at 12:35 PM, Jacob L. Anawalt
<janawalt@geckosoftware.com> wrote:
> 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.


I think it is possible to get the MessageBuffer classes to handle this
as I detailed in another message.

For now I will work around this be creating my own logging macros like this:

#define LOG_DEBUG(logger, message) LOG4CXX_DEBUG( logger, L"" << message )

Hopefully later I can eliminate the macros and have the normal macros
work the way it should.

-- 
Dale King

Mime
View raw message