`
zhtch_123
  • 浏览: 80070 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

[转载] log4cxx在Linux下的安装、使用

 
阅读更多
简单地说,log4cxx就是一个记录日志的C++库(程序运行的时候要保存一些日志到文件,以供将来查看),它是从著名的Java日志库log4j移植而来的,并且它是Apache的一个项目,质量有保证,不用犹豫了,就用它吧!

补一句:Apache声称log4cxx的速度快、灵活性好,但是,速度快是第一位的,灵活性是第二位的("Log4cxx claims to be fast and flexible: speed first, flexibility second."),所以,担心日志记录性能的同学更可以选择log4cxx啦。

但是,这玩意的安装、编译稍微有点麻烦,如果遇到了问题,没耐心的人可能就没兴趣折腾了,我在这里把自己遇到的问题记一下。

系统环境:RHEL 5.3,64位


首先去log4cxx的官方网站下载源码安装包:http://logging.apache.org/log4cxx/,点击左边的“Download”进入下载页面,当前(2011年8月9日)的最新版本是0.10.0,你可以下载 .tar.gz 压缩包,解压出来即可。


然后就可以直接configure,make,make install了吗?不行,因为log4cxx官方提供的源码安装包不是一个all-in-one的包,它还依赖于Apache的另外两个库:Apache Portable Runtime(APR)和Apache Portable Runtime Utility(APR-Util),你可以在这个链接找到它们:http://apr.apache.org/。

(1)安装

安装顺序不能变。首先要安装APR,下载到源码安装包后,解压出来,然后:

./configure –prefix=/usr/local/apr


make


make install


这里把APR安装到了 /usr/local/apr 目录下,注意,千万不要直接./configure,因为那样会把APR的文件安装到若干目录下,非常不利于维护。


文章来源:http://www.codelast.com/

再安装APR-Util,和上面一样,解压出来源码安装包,然后:

./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr

make

make install


这里,通过 –with-apr 参数指定了前一步安装的APR的目录,同时也将APR-Util的安装目录设置在了/usr/local/apr-util 目录下。



最后,就是安装log4cxx了,但是在安装之前,还要再注意一点:configure的时候要指定APR和APR-Util的安装路径:

./configure –prefix=/usr/local/log4cxx –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util

mv libtool libtool.bak

ln -s /usr/bin/libtool libtool

make

make install

注意,中间有两条匪夷所思的命令,如果不执行的话,会报错(我不太记得是在configure的时候还是make的时候报的错了):

/usr/lib/libexpat.so: could not read symbols: File in wrong format


这些问题的解决办法是从网上搜来的,官方的指南做得不给力啊。

文章来源:http://www.codelast.com/

这样就把log4cxx安装上了,然后你需要将log4cxx整合进你的程序中,我是把 log4cxx、APR、APR-Util 的三个静态库文件全部放置到我的工程目录下的某个子目录下,然后在Makefile中指定从这个目录下去寻找库文件。三个静态库名如下:liblog4cxx.a,libapr-1.a,libaprutil-1.a。

此外,我还将 log4cxx、APR、APR-Util 的所有头文件(.h)放置到了工程目录下。并在自己的程序中include工程目录下的这些文件。

然后就是在Makefile中添加上与log4cxx相关的一切东西,包括头文件路径,库文件路径等。如果你编译的时候看到与log4cxx相关的“undefined reference …”的错误,那么肯定是没有找到相关的库文件或头文件,这里需要提醒你的是要添加的几个库文件参数:-llog4cxx,-lapr-1,-laprutil-1。




你把上面的步骤都做好了,这个时候,你再编译你的程序,可能又会遇到以下错误(好吧,的确有点折磨人):

./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `apr_xml_parser_geterror':

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:478: undefined reference to `XML_ErrorString'

./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `do_parse':

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:418: undefined reference to `XML_Parse'

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:422: undefined reference to `XML_GetErrorCode'

./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `cleanup_parser':

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:344: undefined reference to `XML_ParserFree'

./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `apr_xml_parser_create':

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:381: undefined reference to `XML_ParserCreate'

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:390: undefined reference to `XML_SetUserData'

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:391: undefined reference to `XML_SetElementHandler'

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:392: undefined reference to `XML_SetCharacterDataHandler'

/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:404: undefined reference to `XML_SetDefaultHandler'

collect2: ld returned 1 exit status

make: *** [cpsAPI] Error 1


文章来源:http://www.codelast.com/

这些乱七八糟的东西是怎么回事?据网上的一些文章说,这是 libaprutil 的一个bug,它不会自动链接到它的依赖项,从而导致了那些错误。要解决这个问题,你在编译的时候添加 -lexpat 参数即可——无论你是在Makefile中,还是在命令行直接用g++命令编译程序,都必须要带上这个参数,否则就会得到上面的那一堆错误(真让人恼火啊)。

这样,总算全部搞定了,程序可以编译通过了,下面,就是如何使用log4cxx来写日志的问题了,简单地说一下。在你需要写日志的类的文件中(例如MyClass.cpp),include两个log4cxx头文件:log4cxx.h和propertyconfigurator.h,然后在类的外部添加:

static log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("MyClass.cpp"));


然后在需要写日志之前,先加载log4cxx的配置文件(其实也可以不使用配置文件的,这里假设你要使用自定义的配置文件):

log4cxx::PropertyConfigurator::configure("./log4cxx.properties");

这里指定了log4cxx.properties文件作为log4cxx的配置文件(文件名不一定是要叫log4cxx.properties),
在这个文件中定义了各种参数,例如日志文件会写到哪里去,日志的格式等等。具体的格式可以很复杂、功能很强大,这里无法给出一个详细的说明,后面会给出一个简单的文件示例。

然后就可以写日志了,例如:

LOG4CXX_INFO(logger, "Test info message.");


LOG4CXX_ERROR(logger, "Test error message.");

文章来源:http://www.codelast.com/

运行程序,看看日志是否写进去了?写进去的话就说明成功了。
上面所说的log4cxx.properties文件,给一个例子如下:

log4j.rootLogger=debug, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p (%F:%L) %c – %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=./app.log

log4j.appender.R.MaxFileSize=200KB

# Keep one backup file

log4j.appender.R.MaxBackupIndex=10

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p (%F:%L) %c – %m%n

文章来源:http://www.codelast.com/

更多log4cxx的详细用法,可以参考log4cxx的一些官方例子:http://logging.apache.org/log4cxx/index.html
分享到:
评论

相关推荐

    log4cxx + apr + apr-util (linux) 安装使用

    log4cxx是apache的一款优秀的日志文件记录工具,然而,下载能够编译成功的,即log4cxx + apr + apr-util 能够兼容,编译通过的。当时就因为下载的不能够兼容,费了好的的功夫,现在把他们上传上来,供后来人使用

    日志系统log4cxx的安装过程记录

    本文阐述了如何在Windows下以及linux下使用高性能的日志系统log4cxx。注意,在嵌入式linux的环境下使用的过程中发现有内存泄漏问题。关于该问题的解决参考本人上传的另外一份有关 log4cxx 的文档。

    Log4cxx 使用文档

    Log4cxx 使用编译,在2010 出现的错误解决方案。

    windows 下编译好的 log4cxx库,包含完整头文件、debug、release 和一个Qt示例程序

    库是在window平台下编译,64位,共有debug和release两个版本,同时提供完整头文件。 还写了一个使用log4cxx库文件的示例程序,...如果您是Qt程序源,使用该库时可直接在pro文件中加入log4cxx.pri文件即可完成库的加载。

    使用VS2019编译log4cxx.zip

    log4cxx编译所需压缩包,和用vs2019编译好的库

    C++日志库-log4cxx-vs2019编译

    在win10下面用vs2019编译的最新的apache-log4cxx-0.13.0库,里面vs工程都有,在build_win目录下面。

    log4cxx在windows下编译库文件

    C++ 版本 log4cxx在windows下编译的头文件和库

    log4cxx使用VS2015,32位编译通过

    花了3天时间,终于在Visual Studio 2015下编译通过了,附件包含apache-log4cxx-0.10.0、apr和apr-util共3个文件夹,请直接用VS2015打开apache-log4cxx-0.10.0\projects\log4cxx.sln,然后选Release,编译log4cxx即可

    log4cxx vc工程(含vc项目文件和源代码)

    log4cxx是apache开源基金组织下一个很强的日志操作项目,和java平台下的log4j功能一样强大,深受广大c++程序员喜爱; 苦于众所周知的原因,apahce没有提供log4cxx-0.10.0基于visual studio的项目文件; 本资源包含了...

    log4cxx源码编译和示例

    C和C++的经典日志模块log4cxx和其开发示例源码,是apache log4j的C、C++移植类,性能强大,也是公司使用的首选。

    log4cxx日志库

    apache-log4cxx-0.10.0.zip 中包含 include和lib两个目录,lib下的 log4cxx.dll 是用apache-log4cxx-0.10.0开源库编译出来的一个动态库。在其他工程中直接饮用该dll,就可以部署一个简单的日志解决方案

    log4cxx源代码(apache-log4cxx+apr+apr-util+sed)

    log4cxx全套源代码apache-log4cxx+apr+apr-util及需要的工具sed

    log4cxx的demo程序

    自己用c++,vs2005写的一个log4cxx的日志程序,可以进行日志记录,对哪些还不熟悉怎么使用log4cxx的人来说应该有点用

    Log4cxx使用例子

    使用vs2010编译的log4cxx简单测试程序,日志除了会写到文件中,还会发送到本机的chainsaw服务程序,附带多种.properties配置文件例子,附带chainsaw程序。

    log4cxx封装为通用LOG宏

    将log4cxx封装成LOG(level,format,content)的形式,方便使用,也可用于其他开源日志框架的封装,包含log4cxx的详细配置文件。

    log4cxx测试工程

    log4cxx是一个专业的日志系统,我们在日常工作中应该直接使用使得我们的程序更具有可维护性。此程序包含了log4cxx相关的头文件及lib和dll,可直接引入工程,非常方便。

    log4cxx dll .lib .a .so 編譯 linux windows

    log4cxx dll .lib .a .so 編譯 linux windows

    log4cxx 源代码包

    log4cxx ,日志类,源代码 log4cxx是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计,log4cxx是apache软件基金会的开源项目,基于APR实现跨平台支持。一个良好的...

    log4cxx 编译环境整合

    整合好的,可以直接编译通过的log4cxx环境,不用再下 1,apache-log4cxx-0.10.0.zip 2,apr-1.2.11-win32-src.zip 3,apr-iconv-1.2.1-win32-src.zip 4,apr-util-1.2.10-win32-src.zip 这些文件,也不用关心怎么...

    apache-log4cxx 在vs2010下编译通过.

    apache-log4cxx 在vs2010下编译通过.

Global site tag (gtag.js) - Google Analytics