• 用 pythonmessage 为程序库和日志模块解耦


    赖勇浩(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,相信此时你也可以轻松应对了,:)。

  • 相关阅读:
    视图同义词创建
    单据打印模板默认启用打印机本身设置尺寸设置方法
    C语言结构体指针成员强制类型转换
    swoole中swoole_timer_tick回调函数使用对象方法
    利用phpspreadsheet切割excel大文件
    实例讲解如何利用jQuery设置图片居中放大或者缩小
    PHP小练习题
    html5中的progress兼容ie,制作进度条样式
    html5 图片热点area,map的用法
    详解JavaScript中的arc的方法
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154359.html
Copyright © 2020-2023  润新知