log4cpp 相关的问题

原创 2013年12月03日 14:37:36

首先说编译:

     一般如果用vs2005 vs2008 的人,就别用log4cpp1.0.x 的版本吧,vs2010的建议用最新的版本。

先说vs2008的编译问题:

   这里网上很多的办法,都是一样的:

 

在 log4cpp-1.0/msvc6/  下面  ,打开 msvc6.dsw 文件

 

右键工程属性,选择 Custom Build Step ,选择 Command Line ,修改如下

 

if not exist $(OutDir) md $(OutDir)
"mc.exe" -h $(OutDir) -r $(OutDir) $(SolutionDir)NTEventLogCategories.mc
"RC.exe" -r -fo $(OutDir)\$(InputName).res $(ProjectDir)\$(InputName).rc
"link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)\NTEventLogAppender.dll $(OutDir)\$(InputName).res

mc :进程设置信息。

rc : 资源设置信息。

link :链接设置信息。

 

右键工程属性,选择 Custom Build Step ,选择 Outputs ,修改如下

$(OutDir)\NTEventLogAppender.dll

 

之后  添加  FactoryParams.cpp  和 Localtime.cpp 两个文件。

这两个文件一般在 /log4cpp-1.0/src/ 下面。

添加文件后,编译OK。

 

 

其次 ,要说注意点 :

 

    (1.  如果 只需要静态库的话,只需要编译log4cpp 工程就行了 。如果需要动态库,则 只需要编译log4cppdll 工程,编译以后包含一个 静态库和动态库

    (2.  在使用的时候,debug 模式下 使用 一定使用 debug 下编译的 log4cpp | log4cppdll  ,release 模式下 使用 一定使用 release 下编译的 log4cpp | log4cppdll

              不然 在使用某些函数的时候会莫名的崩掉。(一定要注意,使用的时候,搞错过几次。)

    (3.  第三点,就是如果使用配置文件的时候,注意log4cpp 里面进行加载文件的时候,这里传的相对路径,如果传的是绝对路径,log4cpp 是找不到的。

              (特指1.0.x,高版本的不太清楚,没有使用。)

 

如果 在编译 log4cpp 的时候,有问题,就去掉 "link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)\NTEventLogAppender.dll$(OutDir)\$(InputName).res  里面 的 红色的部分。

 

经过 昨天晚上一晚上的尝试,发现并不是log4cpp 加载配置文件 不支持 绝对路径,而是 ,在vs2005 和vs 2008 下面 ,log4cpp 里面用 的是 std::ifstream 进行文件操作,而在vs2005、vs2008 里面 std::ifstream  初始化的时候 ,如果 传入的是 中文路径,就会有 问题 ,从而导致 ,log4cpp 在 加载 路径的时候 直接 找不到 该文件。

下面是 log4cpp 里面的源码 :

   void PropertyConfiguratorImpl::doConfigure(const std::string& initFileName) throw (ConfigureFailure) {
 

// 在下面的 初始化的时候 ,出错。
  std::ifstream initFile(initFileName.c_str());

  if (!initFile)
  {
   throw ConfigureFailure(std::string("File ") + initFileName + " does not exist");
  }
  doConfigure(initFile);
    }

 


解决 办法 :

  可以修改log4cpp 里面的代码,进行重新编译,重新生成 dll 文件 。


解决 vs2008、vs2005 下 std::ifstream 初始化不支持 中文的办法 :



vs2008 、vs2005 下 std::ifstream 中不 支持 中文,是因为,在vs2008 、vs2005 下,默认 传入的 unicode 字符集 ,而我们一般开发的时候 大多数 使用的 多字节字符集,所以会导致 出错 。



1、使用C语言的函数设置为中文运行环境

setlocale(LC_ALL, "Chinese-simplified");

2、使用STL函数设置为系统语言环境

std::locale::global(std::locale(""));

3. 或者 直接 修改  log4cpp 的 参数,直接传入的是 宽字节 。



建议  :

         用 vs 进行编码的时候 ,最好 使用 unicode 字符集编码 , 因为 在内部 中, 会先将 Multi-Byte Character  转换成 unicode 然后 才进行 操作,直接使用 unicode 进行编码 可以提高  应用软件的 速度。




       

 

 

 

 

 

 

 

 

 

 


 


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Dev C++中的错误的解决[Linker error] undefined reference to `__dyn_tls_init_callback'

Dev C++中的错误的解决[Linker error] undefined reference to `__cpu_feat...       解决NOIP环境GUIDE和Dev之间的并存...

VS支持GCC编译

1. 配置管理器添加gcc解决方法配置。 2. “配置属性|常规”项的“配置类型”改为“生成文件” 3. “Nmake”项的“生成命令行”输入:   set path=E:/M...

Log4cpp介绍及使用

Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Wind...

log4Cpp学习(本文转载)

学习目的:通过学习开源框架,仔细研读源代码来提高C++的水平,并在最后通过Windows 和 Linux平台编译和test来增加对两个平台的熟悉;   从http://log4cpp.source...

log4cpp应用手册

log4cpp应用手册 1 下载log4cpp并解压。 2 打开/log4cpp-0.3.4b/msvc6/msvc6.dsw   编译log4cpp工程Release版。   3...

便利的开发工具-log4cpp快速使用指南

简介: log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内的C...

基于LGPL开源项目 Log4cpp安装与使用

【IT168 专稿】Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文...

log4cpp使用(一)

log4cpp中可以在main()中设定root 型Category后,在其它文件中或线程中获得其子Category,从而反日志写入同一个文件。如 xxx.cpp中内容为 void...

分享一个log4cpp的配置文件

################################################################ #1、log4cpp.可以省略 #2、等号左右两侧的名称大小写敏感 #...
  • lslxdx
  • lslxdx
  • 2012年06月02日 16:05
  • 2098

Log4cpp使用

下载地址:https://github.com/ietjxdl/log4cpp 系统环境:windows 7 32位 开发环境:vs2010 软件版本:log4cpp-1.1.tar.gz   编译 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:log4cpp 相关的问题
举报原因:
原因补充:

(最多只允许输入30个字)