您的位置:首页 > 编程语言 > C语言/C++

vs2015 c++11 log4cplus 中文问题

2017-03-26 12:45 274 查看
最近为了使用c++11的一些特性,将工程升级到vs2015,发现原先的log4cplus输出中文有问题,调试发现log4cplus经过2015编译后,其initialize是在DLL_PROCESS_ATTACH时调用的,原先针对vs2010之前的中文问

题的修改方案("std::locale:global(std::locale("chs"))")已经没有效果了,所以需要通过直接修改

FileAppenderBase::imbue(std::locale const& loc)
{
return out.imbue (loc);
}
此处的输出流locale设置,所以在使用的地方

// 定义一个滚动文件的Appender
SharedFileAppenderPtr pRollingFileAppender(new RollingFileAppender(strFileName.GetString(), 1024 * 1024 * 10, 5, true, true));
std::locale lc("chs");
//std::locale::global(lc);
pRollingFileAppender->imbue(lc);
pRollingFileAppender->setLayout(std::unique_ptr<Layout>(new PatternLayout(L"%D%d{.%q} - %m%n")));
// 定义Logger,并设置优先级
Logger logger = Logger::getRoot();
logger.setLogLevel(INFO_LOG_LEVEL);

// 将需要关联Logger的Appender添加到Logger上
logger.addAppender(SharedAppenderPtr(pRollingFileAppender.get()));
Logger::getRoot().log(INFO_LOG_LEVEL, L"Initialize", __FILE__, __LINE__);


通过定义locale,设置使用的fileappender的imbue就可以了,同时保证程序和log4cplus的运行时环境要一致(我的为MDd).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息