简单地说,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在Windows和Linux下的安装步骤,以及基本的使用方法。 **一、Windows下的安装** 1. **下载依赖库**:首先,你需要下载`apache-log4cxx-0.10.0.zip`、`apr-1.2.11-win32-src.zip`、`apr-util-...
log4cxx是apache的一款优秀的日志文件记录工具,然而,下载能够编译成功的,即log4cxx + apr + apr-util 能够兼容,编译通过的。当时就因为下载的不能够兼容,费了好的的功夫,现在把他们上传上来,供后来人使用
本文档将基于该版本来详细介绍Log4cxx的安装与使用。 #### 二、软件包获取 为了正确安装并使用Log4cxx,首先需要获取必要的软件包: 1. **从Apache官方站点下载**: - APR (Apache Portable Runtime):用于支持...
如果你需要在VS2019环境下快速开始log4cxx的使用,可以直接解压这个文件,导入相关的头文件和库文件到你的项目中。 `apache-log4cxx-0.10.0.zip`是log4cxx的源代码包,版本为0.10.0。如果你需要对log4cxx进行自定义...
将log4cxx封装为LOG(level, format, content)的形式,可以使得日志的使用更加简洁,参数level代表日志级别,format定义日志输出格式,content则为要输出的具体内容。 封装LOG宏通常涉及以下步骤: 1. 定义宏:创建...
描述"C++ 版本 log4cxx在windows下编译的头文件和库"意味着这个压缩包可能包含了log4cxx库的源代码头文件以及编译后的静态或动态库文件,供开发者在Windows环境下链接和使用log4cxx进行日志管理。 **C++与Windows...
通过以上步骤,你就可以在VS2015环境下成功构建并使用64位的log4cxx库,实现高效、灵活的日志管理。log4cxx强大的功能和易用性使其成为C++开发者的得力助手,无论是在大型企业级项目还是小型个人项目中,都能发挥出...
在Linux系统下,log4cxx通常生成.a静态库和.so动态库。静态库(.a)在编译时链接到目标程序,而动态库(.so)在运行时加载。 1. 编译步骤: - 安装GCC或Clang等编译工具链,以及必要的依赖如Boost等。 - 获取log4cxx...
在给定的“Log4cxx使用例子”中,我们可以通过提供的资源来了解如何在VS2010环境下配置和使用Log4cxx。 首先,`log4j-1.3alpha-7.jar`、`jmdns.jar`、`log4j-optional-1.3alpha-7.jar`、`log4j-zeroconf.jar`等文件...
`log4cxx` 提供了多种优化手段,如日志消息的缓冲处理、异步写入以及日志级别检查,以确保在高并发环境下仍然保持良好的性能。 **总结** `log4cxx` 是 C++ 开发者强大的日志工具,能够帮助他们轻松地管理和控制...
在本文中,我们将深入探讨 `log4cxx` 的核心概念、配置方法以及如何在实际项目中使用它。我们还将通过一个具体的实例来展示其在 release 和 debug 模式下的编译和运行。 **一、log4cxx的核心概念** 1. **Logger**:...
要使用log4cxx,你需要在你的C++项目中包含相应的头文件,然后配置log4cxx的配置文件,比如log4cxx.properties或log4cxx.xml。配置文件可以定义日志级别(DEBUG、INFO、WARN、ERROR、FATAL等)、输出目的地(控制台...
在 macOS 上使用 `log4cxx` 首先需要确保安装了 C++ 编译环境,如 Xcode 或者 Homebrew 中的 `gcc` 和 `cmake`。下载源码后,通常通过 `cmake` 和 `make` 进行编译。提供的资源已经包含了编译好的库文件和头文件,...
在开始编写代码前,你需要先下载并安装Log4cxx库。通常,你可以通过包管理器(如apt-get或yum)或者从Apache官方网站获取源码编译安装。安装完成后,需要在项目中包含必要的头文件,并链接Log4cxx库。 2. **创建...
库是在window平台下编译,64位,共有debug和release两个版本,同时提供完整头文件。 还写了一个使用log4cxx库文件的示例程序,...如果您是Qt程序源,使用该库时可直接在pro文件中加入log4cxx.pri文件即可完成库的加载。
提供的压缩包中可能包含了Log4cxx的使用示例,通过阅读和运行这个Demo,你可以更直观地了解如何在实际项目中集成和使用Log4cxx。Demo通常会展示如何配置日志级别、创建Logger、添加Appender和Layout,以及如何输出...
在Visual Studio 2010 (VS2010)下编译和使用Log4cxx,需要了解一些关键步骤和知识点。本文将深入探讨如何在VS2010中成功配置和编译Apache Log4cxx库。 首先,我们需要理解Log4cxx的基本概念。Log4cxx是基于灵活的...
1. **安装与配置**:下载并解压apache-log4cxx-0.10.0,使用VS2010打开工程并编译,确保所有依赖项都已安装。 2. **创建配置文件**:编写XML配置文件(如log4cxx.properties或log4cxx.xml),定义日志行为。 3. **...
在编译 Log4cxx 版本 0.10.0 时,需要注意使用特定版本的 APR 和 APR-Util,因为最新版本可能与 Log4cxx 不兼容。可以从 Apache 官方网站下载对应的源代码包: a) Apache Log4cxx 0.10.0: ...
在Visual Studio 2015环境下编译`log4cxx`库,你需要进行以下步骤: 1. **获取源代码**:首先,从Apache官方网站或其他可靠的源下载`log4cxx`的源代码包,例如`develop-0.10.0`分支。 2. **安装依赖**:确保你的...