C++项目开发之日志模块(一)

最近有点时间可以整理一下前段时间做的项目。项目本身是基于VC的,ATL框架下做COM组件开发。因为项目涉及的内容很杂,所以只能具体问题具体分析,具有普遍性的问题还是需要拿出来总结一下的。

关于日志。这个问题在项目初期的时候没有约定好,成了以后的一个大问题。最初考虑到项目的成果都是组件,每个组件只要测试维护好自己的功能就可以,没有过多的强调日志模块的作用,后期试生产和调试过程因此产生了很多不必要的麻烦。

项目初期的设计阶段,我们作了一些比较细致的需求分析,因为每个组件的功能划分的非常清楚,而且每个组件的开发维护可以具体到人,所以公共模块的划分比较模糊。当然通常情况下如果我们设计的是一个系统,可能对于系统分层以及模块的划分会比较清楚,和这个情况不同,项目本身的各组件之间初期联系很少,而且功能比较单一和独立,想当然的就缺少了整体的考虑,而是每个组件自己做自己的,不过对于中小规模的开发这样做未尝不可。

项目中期阶段,问题开始显现,原定的项目计划因为用户的需求改变,有所调整,很多与核心组件有关,但关系不大的功能开始交织进来。第一个问题,需要加入的功能很多,功能之间有叠加了。第二个问题,非常强调组件的性能了。第三个问题,第三方组件在数据压力下不稳定了。这些问题可以说是我们项目初期设计上的考虑不足,本以为是个小项目,最后小项目要大做了。作为系统开发人员也得硬着头皮上了。

功能复杂后,初期的设计不能满足需求,那就必须重构了,此处就不多说了。这里强调的是日志模块,日志功能可以归入常用功能,可以不局限当前项目,如果做得好可以在很多项目中通用。今年年初参加设计方面的培训,统计一下常用功能,发现很多公司能通用的功能很多很杂,但是最通用的就是日志功能。不要小看日志,日志对于系统大问题的解决作用很大。有经验的开发人员可以通过日志评估当前系统的状态。对于当前项目的后两个问题,性能和不稳定,最好的分析方法就是日志。

组件性能在日志中如何体现?对于web开发可能有很多第三方工具做测试,而对于服务器中数据处理和计算的跟踪最好的方法仍然是日志,比如针对某种类型的数据,需要调用某种组件单独处理,组件调用后具体花了多长时间处理呢?用户可以不知道这些,但是对于系统开发和维护人员这些都必须了然于胸。通过日志,记录下关键任务的执行细节,都很重要。

跟踪不稳定模块,日志起到的作用更强大。事实上不稳定的组件最后导致的结果必然是结果不正确或者系统崩溃,结果不正确,可以通过详细的调试过程来完善,系统崩溃就不好解决了。很多时候即使能确定哪个组件导致的,可是仍然无法断言问题出在哪,而如果有了日志,这个问题也能迎刃而解。

自己写还是用其他的?建议还是用比较好的开源。自己写着试试可以,但是自己写的好不好是要打问号的,因为做日志不只是打开文件写内容那么简单,具体的输出设备要不要考虑,信息如何分类,结构如何松散通用?我也自己写过(5年C++经验),但是从通用和易用上感觉还是不怎么好用,所以建议用比较牛X的开源比较好,一方面是学习,一方面也比较强壮。

我初期试用的是log4cPlus,说实话,这个开源组件水平还是一般,在linux和window下,以及多款c++开发平台下测试,容易出问题(崩溃,内存问题),强烈不推荐。最近在用log4cxx,这个是Apache的开源,非常好,大小项目都能用,非常推荐使用。只是编译比较费劲。编译完了,后面的使用就顺利了,强烈建议C++用户使用,跨平台,支持多线程等优势。其他的几款效果都一般,google的开源日志也行,只是安装和使用都比较复杂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值