问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现log4cxx日志输出方式

发布网友 发布时间:2022-05-07 05:54

我来回答

2个回答

热心网友 时间:2022-05-07 07:24

Log4cxx是开放源代码项目Apache Logging Service的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试
和审计。本文对log4cxx的使用及配置进行介绍,并给出一个可以快速开始的实例。最后,针对日志服务给出一些实践方面的建议。
1. 介绍
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志
功能,以便开发者对目标程序进行调试和审计。
有关log4cxx的更多信息可以从Apache Loggin Service的网站http://logging.apache.org获得。当前的稳定版本为0.9.7,本文内
容及示例代码都是基于此版本。此外,示例代码的编译环境为Windows环境中的Microsoft Visual C++ .Net 2003。
本文的示例代码可以在此下载,其中也包含了预编译好的log4cxx的库文件。
2. 集成log4cxx到IDE
要使用log4cxx,首先需要将其集成到你的项目开发环境中。以下针对Windows环境中的Microsoft Visual C++ .Net 2003进行说明
,其他环境的配置信息请参考官方文档。
要让log4cxx为你工作,通常情况下需要如下几个步骤:
l 获取软件包:得到log4xx的源代码;
l 编译:构建库文件;
l 项目环境设置:加入log4cxx支持。
2.1 获取软件包
请从官方网站获得合适的版本。也可以从下面这个链接中直接获取(直接的链接地址可能不会永远有效):
http://mirror.vmmatrix.net/apache/logging/log4cxx/log4cxx-0.9.7.tar.gz
下载完成后解压缩到合适的目录中,因为我们在下一步中需要使用软件包,包括编译和复制必要的文件。
2.2 编译
原始发行包中不含编译后的代码,这个工作需要我们自己来做。打开你的IDE,并加载以下目录中的工程:
l Msvc\static:该工程产生log4cxx的静态链接库(lib4cxx.lib和lib4cxxs.lib);
l Msvc\dll:该工程产生log4cxx的动态链接库(lib4cxx.dll)。
通常情况下,工程都可以顺利编译通过。查看输出目录,把这些生成的库文件找出来,以便在下一步骤中使用。
2.3 项目环境设置
请先在IDE中打开一个需要加入日志功能的工程,或者出于实验目的,新建一个工程,以便对其进行设置。
首先需要设置log4cxx的include文件。这些文件位于log4cxx软件包的include\log4cxx目录内。请查看你的VC++ IDE中“工具->选
项->项目->VC++目录->包含文件”所列出的内容,以便确定你以何种方式加入这些include文件:
l 将include\log4cxx直接拷贝到已定义的包含文件目录中。如果将log4cxx看作是一项系统服务的话,这样做是胡合乎情理
的,因为你可以采用标准库的方式使用它,例如:#include <log4cxx/logger.h>
l 增加一个包含路径,以指向位于IDE外部的某一文件目录。可以简单的指向在2.1中解压缩后形成的log4cxx软件包目录。
下一步需要对2.2节产生的log4cxx库进行设置。这取决于你使用该库的方式:静态链接或者动态链接。
l 静态链接情况下需要做如下工作:为预编译器定义LOG4CXX_STATIC宏,设置位置为“项目->属性->配置属性->C/C++->预
处理器->预处理器定义”;为链接器指定依赖的库lib4cxxs.lib和Ws2_32.lib,设置位置为“项目->属性->配置属性->链接器->输
入->附加依赖项”。
l 动态链接情况下只需要为链接器指定依赖的库lib4cxxs.lib即可,设置方式同上。

3. 示例代码
本节展示了一个最简单的log4cxx示例,以便你可以快速的了解它。
该示例在功能上创建了一个日志服务,该日志可通过配置文件进行必要控制,并可以同时向文件和控制台输出信息。
在实现上,我们采用了一个简单的控制台程序,并使用动态链接库的方式使用log4cxx。
要实现这个目标,请按如下步骤进行:
1)创建一个名为logdemo的空白win32控制台工程,并按照2.3节所述内容对其进行设置。注意,这里我们使用动态连接口的方式。
2)在logdemo.cpp中加入实现日志功能的代码。完成后的代码清单如下:
#include "stdafx.h"
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>

using namespace log4cxx;

int _tmain(int argc, _TCHAR* argv[])
{
//加载log4cxx的配置文件,这里使用了属性文件
PropertyConfigurator::configure("log4cxx.properties");

//获得一个Logger,这里使用了RootLogger
LoggerPtr rootLogger = Logger::getRootLogger();

//发出INFO级别的输出请求
LOG4CXX_INFO(rootLogger, _T("它的确工作了"));
//rootLogger->info(_T("它的确工作了")); //与上面那句话功能相当

return 0;
}

以Debug方式编译工程,调试程序直到成功为止。
3)新建一个文本文件,命名为log4cxx.properties,并键入如下内容:
# 设置root logger为DEBUG级别,使用了ca和fa两个Appender
log4j.rootLogger=DEBUG, ca, fa

4)复制log4cxx.dll到输出目录。在动态链接方式下,应用程序需要能够找到这个库文件。
5)运行生成的logdemo.exe文件,查看一下运行结果,看看我们工作有没有取得成效。如果一切顺利,无论是在控制台还是在输出
文件中,都应该能看到类似下面那样的输出内容:
2006-06-02 16:09:50,609 [2528] INFO root - 它的确工作了

4. 体系结构
4.1 核心类
Log4cxx有三个关键组件,它们是loggers, appenders和layouts。
Logger是log4cxx的核心类,只要执行日志操作;looger有层次结构,最顶层为RootLogger;logger是有级别的。每个logger可以附
加多个Appender。Appender代表了日志输出的目标,如输出到文件、控制台等等。对于每一种appender,都可以通过layout进行格
式设置。
这三类组件用示意图表示如下(不代表类关系):
(TODO:在此对三种组件分别进行说明)
4.2 配置类
此外在使用中还会用到的类有BasicConfigurator、PropertyConfigurator和DOMConfigurator等,用于对log4cxx进行配置。其中:
BasicConfigurator提供了一种简单配置,包括使用ConsoleAppder作为root appender和PatternLayout作为缺省布局。
PropertyConfigurator使用properties文件作为配置方式。
DOMConfigurator则使用properties文件作为配置方式。
(TODO:在此对配置内容进行说明)
5. 实践指导
在项目中是否使用日志,以及如何使用日志,对开发者来说都是一个需要做出的技术选择,这通常会牵扯到系统的性能,使用日志
的目的等问题。我们使用日志的方式,有些是这个行业积累了多年的经验,有些则纯粹关乎个人的喜好。
1)何时使用日志
通常情况下,日志的作用在于调试和审计,如果你的项目对此有特殊需求,即可考虑使用日志。
对于调试,通常用于IDE调试器无法达到的地方。一些常见的场景包括:
分布式组件的调试。在服务器端的组件,需要通过客户端的调用来验证其工作是否正确,此时利用日志的输出作为辅助工具对错误
进行诊断。
链接库调试。在无法跟踪进外部库中的情况下,这种方法非常有效。
生产环境下的调试。生产环境通常是指产品在客户处处于正式运行的状态,在出现问题时,开发者常常不在现场,借助日志的输出
进行错误判断就是一个非常有效的手段。
对于审计应用,则需要视特定的情况而定,程序级的记录能力,无疑可以作为业务级审计手段的有效补充。
无论是在哪种场景下,log4cxx都是可以胜任工作的,这取决于它的灵活的配置能力及多种类型的输出方式。
2)性能问题
关闭日志,通过配置文件设置日志的关闭和打开
使用宏代替logger的输出命令
选择性输出日志。建立logger的层次结构,根据级别选择性输出
输出目标。尽可能减少输出目标
选择合适的输出格式。使用SimpleLayout将达到与std::cout相当的速度。
3)其它
使用类的全限定名对logger命名
6. 结论
Log4cxx具有的一些显著特性使得C++者可以将其放入自己的工具箱中,这些特性包括灵活的配置能力,多种输出手段,丰富的格式
控制,出色的性能。如果在你的开发中需要借助于日志进行调试和审计,你也许需要log4cxx。最后,重要的一点是,如你所见,
log4cxx的使用是如此的简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...经常感到孤独、万事无聊,请问怎样治疗孤独?谢谢! 移动号码不用了一段时间现在拨号显示空号要怎么激活 圣女小番茄简介 《一曲终人两散》最新txt全集下载 石膏几何体写生内容简介 石膏几何体内容简介 句子: We mustn't climb the trees.怎么填空? 市妇婴医院生产点样建档? 长治怀孕建档要准备什么材料呢? 工厂隔音房 丙氨酸氨基转移酶偏高吃什么药 为什么三菱重工空调关后还在运行 24岁,男性,在17岁左右的时候检查患有大三阳,眼睛及小便黄【大三阳】 有一台5匹的三菱重工海尔空调机,制冷全部正常,切换到制热时,内机风扇不转 柜子里有蟑螂,清理以后用水把柜子刷了,还放了防虫香薰包,还会再有 如何确定是不是股骨头坏死呢 如何诊断股骨头坏死啊? 股骨头坏死可以怎么鉴别诊断? CLIP PROJECT8.2谁有? 边边面肉臊子的做法 如何早期发现股骨头坏死 PHOENIX GERMANY是哪个公司? 怎么打菲尼克斯 菲尼克斯电气是做什么产品的啊哪位大师在负责设备的啊 有哪位知道菲尼克斯端子和凤凰端子有什么关系? P图大神帮忙把把黑色的去了吧,但是图片不能修改了或者图片大小编辑了,最起码QQ头像可以把整个耳朵都 凤凰端子的分类,是怎么样分的? 那个p图大神能帮我合成一字马照片 我的主板是什么主板? PHOENIX CONTACT交换机红灯亮 勃勃生机的勃勃是什么意思 乙肝表面抗原25.5乙肝E抗原22乙肝 &quot;生机勃勃&quot;里&quot;勃勃&quot;是什么意思?急!!! 网约车平台接机场订单较多的排行站前是哪一个 网易绑定密保时出现:该手机号已经被太多帐号使用,请您更换其他手机号尝试绑定,或使用将军令!怎么解绑 生机勃勃与勃勃生机有什么区别? 生机勃勃的意思是什么意思是什么 如何用PS处理让模糊的数码照片清晰啊 高分 姓黄女生取名字 铁路之父是谁? 中国铁路之父是不是詹天佑?他对中国有什么影响? 詹天佑,他被称为什么之父。 为什么詹天佑被称为铁路之父? 成年人咳嗽吃什么中药好 詹天佑为中国铁路事业做出了什么贡献? 詹天佑的详细资料和京张铁路的详细资料。 肺热咳嗽吃什么中药? 詹天佑是哪里人? 输卵管堵塞怎么治疗? 淘宝上的旺旺在淘宝特价板上能通用吗?