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"))")已经没有效果了,所以需要通过直接修改
通过定义locale,设置使用的fileappender的imbue就可以了,同时保证程序和log4cplus的运行时环境要一致(我的为MDd).
题的修改方案("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).
相关文章推荐
- 在vs2015中使用qt5出现中文乱码的问题
- VS2015解决非Unicode编码包含中文字段无法编译的问题
- 解决Qt5和VS2015中文乱码的问题
- QtCreator 4.0 Q5.7 VS2015 源码中有中文导致编译失败的问题的解决方法
- VS2015 PHP中文乱码问题
- Win安装VS2015中文语言包安装失败问题
- 解决Qt5和VS2015中文乱码的问题
- CUDA&OPenGL环境搭建和测试问题总结(VS2015)
- vs2015 64位系统下使用mdb数据库问题
- VS2015调用低版本lib库出现“无法解析的外部符号 __snprintf ”问题的解决
- opencl 在vs2015上遇见的问题
- 关于安装vs2015后, vs2013打开项目工程失败崩溃的问题!
- 解决:VS 2005/2008 中 fstream 不能处理带有中文路径的问题
- 【Win10 应用开发】解决VS 2015 RC不能调试手机应用的问题
- VS2015不能修改安装路径问题
- vs2015安装中文语言包后无法检测到中文语言包
- VS Code编译支持C++11问题
- vs2015的部署以及一些其他问题
- 解决VS2015安装后stdio.h ucrtd.lib等文件无法识别问题,即include+lib环境变量配置
- Matlab2014a 和VS 2015 COMM安装问题Test checkout of feature 'Compiler' failed,mex未找到支持的编译器或 SDK