log4cxx, unicode & русский текст
От: distance  
Дата: 17.11.06 16:35
Оценка:
ползуюсь уже почти пол-года log4cxx v0.9.7 и горя не знаю. у вдруг чего-то дернуло меня выводить русские символы. а не выводятся.
как строковые коннстанты, записанные с коде, как и приходящие извне (там — честный юникод utf-16)
Программа также скомпилированна в юникоде.

сначала попробовал просто вызвать _wsetlocale:

    _tsetlocale (LC_ALL, _T("russian"));


не помогло. русский текст "проглатывается".
посмотрел в исходники лоджера, там вывод происходит через такого вида макросы:

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


StringBuffer — наследник от basic_ostream<TCHAR>.
вставил в программу код из макроса, только добавил вызов imbue:

        ::log4cxx::StringBuffer oss;
        oss.imbue(std::locale("rus_rus.866"));
        oss << messageT;
        log->forcedLog(::log4cxx::Level::DEBUG, oss.str(), __FILE__, __LINE__);


эффект — 0. есть идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.