日志系统的设计模式

从事服务器程序开发的工程师们,几乎不可避免地需要使用到日志系统(Logging System)。

如果从头开发一个服务器程序,我们有若干开源的日志系统可供选择,例如:Java语言中,Log4j是个不错的选择;Python语言中,有logging类;C语言中,有:Log4c、libqb等。

这些开源的日志系统,几乎都使用到相同的设计模式,不同之处在于实现语言、实现方法,以及附加的一些额外功能。今天,我想介绍一下这个共通的设计模式,这会有助于我们用好这些开源的日志系统,或改进它们。

这些日志系统,包含三个要素:

  1. content: 日志的内容,通过在代码中调用日志接口,如log_printf("xxx"),向日志系统传递内容
  2. target: 日志的目标,即日志写到什么地方,例如可以同时写到stderr/syslog/xxx.log
  3. filter: 日志过滤规则,用于决定每一条日志能否输出到某个目标上

一个日志系统,可以定义多个日志目标;每个日志目标,有属于它自己的若干条过滤规则。

当日志系统,通过日志接口,接收到一条日志内容后(content),它做以下处理:

for t in targets; {
	pass = False;
	for f in t.filters; {
		if content satisfies f; {
			pass = True;
			break;
		}
	}
	
	if (pass) {
		print con
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值