Chinaunix
标题:
如何设计一个比较好的日志系统类?
[打印本页]
作者:
totopper
时间:
2012-11-30 07:33
标题:
如何设计一个比较好的日志系统类?
一个大型系统,用C++写的,现在需要写一个日志类,用于记录整个系统的运行状态,以便出现问题时跟踪原因,
考虑的方法是设计一个log类,然后将运行过程中进入的模块名和部分变量名都及时打印在一个按日期命名的log文件里,
但是因为
每个模块调用这个类时总是要实例化一些,然后开始写文件,这样就会有大量的类对象创建和销毁的开销,请问有什么方法来避免这个问题呢
谢谢
作者:
kongrenxin
时间:
2012-11-30 08:40
log类维护个消息队列吧,其它模块向它投递消息,日志顺序处理。
作者:
hellioncu
时间:
2012-11-30 08:51
用单实例模式
作者:
SongOffering
时间:
2012-11-30 11:38
2L 正解啊,开个单独的日志线程负责从队列里面取消息写入文件,这样你的日志的滚动功能,buffer控制,格式的转换等等,都可以在这个线程中处理。
作者:
littledick
时间:
2012-11-30 13:16
难道是回家作业?
作者:
taotao_112206_c
时间:
2012-11-30 15:37
这个就是c++比较恶心的地方,不能直接引用,还得弄个类实例化,C没问题,可以封装个静态库直接调API,像C一样
作者:
start4u
时间:
2012-11-30 16:26
log4cxx
)
作者:
sonicling
时间:
2012-11-30 16:33
对象的创建和销毁开销对于log来说九牛一毛。
有些人喜欢对C++那微不足道的额外开销斤斤计较,却对自己笨拙的设计视而不见。
作者:
sonicling
时间:
2012-11-30 16:39
俺曾经对虚函数的两次寻址耿耿于怀,于是试遍了所有能想到的方法,发现虚函数的方案性能不差,代码最少,使用最方便。
作者:
zighouse
时间:
2012-11-30 18:38
i use pantheios
作者:
myaiee
时间:
2012-12-03 14:58
kongrenxin 发表于 2012-11-30 08:40
log类维护个消息队列吧,其它模块向它投递消息,日志顺序处理。
这个方法可以,专门的日志线程从日志消息队列中读取消息日志并写入日志中,这样可能存在一个问题,日志消息队列该设为多大的值才合适呢?因为在LZ所说的系统中,产生的日志的量肯定不小,可能一秒之内就会产生几十M日志,这样的话,消息队列大小的设计是一个关键。
其实我在想,lz为什么不用linux系统自带的syslog-ng来写日志,通过配置/etc/syslog-ng.conf 这个配置文件,可以把日志分门别类的管理起来,而且系统提供的开源的东西经过大家的实践肯定比自己写的东西的稳定性要更好,或许咱们自己写能更好的控制自己的代码,但是syslog-ng绝对比你想象的好用。
如果非要自己写,对于lz频繁的创建销毁对象,这确实会影响系统的性能,实际上我觉得可以再增加一个类,这个类可以用来管理那些不再使用的类对象。比如:在Log类中,创建了很多log对象,但是现在log对象使用完了,并不销毁它,二是把它放在回收池类中,当下次再要使用log类时,从回收池中取一个log对象就行了,当然这个回收池也得设计好。这样的优点很明显,避免了频繁的调用构造函数和析构函数,但缺点就是会占用一部分内存,这主要看回收池类怎样设计了。
作者:
pself
时间:
2012-12-03 15:40
回复
9#
sonicling
哈哈 握手
作者:
guoruimin
时间:
2012-12-03 16:52
写代码前,先想想你的需求,是不是很常见的需求。
像这样的需求,根本不需要写代码就解决了。
寻找一个好的实现吧!
要学会考虑,怎么才能不写代码,怎么才能少写代码。
作者:
fly.sky
时间:
2012-12-05 04:18
回复
11#
myaiee
我想管理用户使用rm删除情况,这个可以管理吗?
作者:
totopper
时间:
2012-12-05 07:25
回复
5#
littledick
不是的啊,就是一个实际的系统...,不是大学作业
作者:
totopper
时间:
2012-12-05 07:25
回复
13#
guoruimin
嗯,再想想有什么别的方法来解决这个问题....
作者:
osmanthusgfy
时间:
2012-12-05 13:01
推介log4cplus.
log4cxx需要依赖apr,维护和更新少,编译复杂.
log4cplus不依赖其他的库,持续更新和维护(每年都会发布新的版本),编译很简单.
apache出的东西一般都比较臃肿,更新不是很积极,有很多项目几年都不见更新.
当然,apache的品质还行.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2