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 进行编码 可以提高  应用软件的 速度。




       

 

 

 

 

 

 

 

 

 

 


 


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

Log4cpp 写本地日志 简单的配置文件 自定义文件名

一个简单的log4cpp写本地日志的配置文件,并附有如何自定义日志文件名以及写配置需要注意的一些地方。...
  • l7l1l0l
  • l7l1l0l
  • 2015年01月21日 21:45
  • 2644

log4cpp 内存泄漏 解决方法

log4cpp memory leak solution MFC 内存泄漏
  • Ani
  • Ani
  • 2011年04月29日 14:56
  • 2518

交叉编译log4cpp到ppc

近来要移植个项目代码到ppc板卡上,代码链接了好多库,之前没搞过,感觉无从下手,遂先拿log4cpp开刀。         主要进行了以下几步操作,中间页遇到了些问题:         第一步: ...
  • aikui0621
  • aikui0621
  • 2014年03月11日 17:34
  • 1141

log4cpp介绍以及使用

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

log4cpp:定制日志格式,输出日志

一、配置文件       log.conf: #a simple test config log4cpp.rootCategory=DEBUG, rootAppender #print to Fil...
  • kanguolaikanguolaik
  • kanguolaikanguolaik
  • 2013年12月13日 16:15
  • 2184

log4cpp 编译与使用

一 引言 Log4cpp是个开源的日志跟踪项目,它是运行在c++环境下的。 由于Java的日志处理跟踪项目log4j的效果很好,所以把它移植到c++,并保持了API上的一致。其类似的支持库还包...
  • xiaocainiao_2015
  • xiaocainiao_2015
  • 2015年07月19日 22:51
  • 1514

Linux下Log4cpp封装全过程

这几天开始封装日子,打算采用Log4cpp提供的日志功能来写日子。为了方便产品内的调用,提议做了一部分封装,将log4cpp的静态库 log4cpp.a 静态链接到我开发的logLibrary.so内...
  • djl310
  • djl310
  • 2011年08月24日 08:37
  • 2681

Log4cpp: log4cpp快速使用指南

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

log4cpp深度封装

简介关于log4cpp的介绍与好处就不再赘言了,百度一搜一大把。主要是对于log4cpp的使用如果不封装一下,感觉还是挺麻烦的,例如不少函数名挺长的。所以自己动手把它的日常使用进行了封装,可以让使用l...
  • LHJ884
  • LHJ884
  • 2015年08月03日 16:05
  • 3456

linux(centos 6.2, 本人使用版本)下使用Log4cpp为程序生成日志文件

在linux系统下调试代码可以使用的方法有:gdb, 控制台输出 和 生成日志文件 在程序中不可避免的要使用日志文件记录其运行时的状态 先简单介绍使用日志文件: 1 日志配置文件,一般是xxxx...
  • u012782377
  • u012782377
  • 2014年04月11日 14:09
  • 803
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:log4cpp 相关的问题
举报原因:
原因补充:

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