用 python-message 为程序库和日志模块解耦

赖勇浩(http://laiyonghao.com)
之前我说过 python-message 与常见的 signal/slot 不同,处理函数不需要知道谁会发出一条信息,而发出信息的对象也不必知道是否有人处理它。这个与众不同的特性,显然有更宽广的适用范围,下面就是其中一个例子。
假定你在编写一个非常牛X的程序库,姑且为它取名为 foo,里面有一个函数叫 bar,你就想啊,这么牛X的一个函数,肯定要写一下 log 啊,所以你就写了以下代码:

你高高兴兴发了版本,大家都过得很好。过了几天,公司的另一个项目组听闻牛人您写了个库叫 foo,非常好用,就拿去用了。当天,快下班的时候,你被拖去救火,因为出 Bug 了呀。你查看了很久日志,都没有发现他们调用 bar() 的痕迹,一问,原来他们是用 logging 的,标准输出在做 Daemon 的时候被重定向到 /dev/null 去了……。
好吧,你忍。但没法忍啊,你们原来的项目又不用 logging,你在程序库里引入 logging 谁来初始化它呢?就算你引入了 logging,你们项目获取 logger 可能是用 logging.getLogger('prjA'),另一个项目可能是用 logging.getLogger('prjB'),日后还有新项目呢,想到这个你就蛋疼了。忍痛割爱,把 print 语句给删除掉?你又怕日后出了问题你自己都找不到 Bug 那还不是自己加班自己苦……。
这个时候,不妨让 python-message 来帮你手,轻松改一下 bar() 函数

而在你的项目中,只需要在项目开始处加上这样的代码:

而很类似地,在另一个项目 prjA 里,你可以把 handle_foo_log_msg() 稍作修改:

在另一个 prjB 里则可能是这样:

如果还有另一个 prjC 使用了其它的 log,相信此时你也可以轻松应对了,:)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值