赖勇浩(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,相信此时你也可以轻松应对了,:)。
分享到:
相关推荐
DecouplingKit是iOS模块化过程中模块间解耦方案
iOS模块化过程中模块间解耦方案.zip,decoupling between modules in your iOS Project. iOS模块化过程中模块间解耦方案
AS-i 数据解耦模块 DCM 1271[手册]pdf,
用python写的分布式监控软件 参考zabbix,openfalcon架构,前端、后端、监控插件、画图、数据优化存储等全部自己实现,通过学习本项目可以了解复杂自动化项目的架构设计、程序解耦原则、前后端数据交互等多项实战技能...
Decoupling Localization and Classification in Single Shot Temporal Action Detection
原本设计了一个用于编码,运行和编译问题的单页Web应用程序。为了重构和改进系统吞吐量,使用基于RESTful API的解耦服务和由Nginx加载的平衡。
工欲善其事,必先利其器。...工程耦合,每个模块有自己的生命周期和运行时,每个模块在生产环境里又需要依赖主工程的运行时 放弃源码依赖,提速集成编译 github地址:https://github.com/MrLujh/RouteManager
iOS模块化,模块间解耦,路由中心设计
本程序用于解耦控制的控制器设计以及函数计算
Java-SpringBoot-使用多态给项目解耦.doc
iOS模块化构建方案,模块间解耦,路由中心设计方案
行业分类-设备装置-一种支持解耦温度和应变的光纤光栅应变传感器.zip
PyTorch实现的使用合成梯度的解耦神经接口。它在现有的神经网络模型基础上,提出了一种称为 Decoupled Neural Interfaces(后面缩写为 DNI) 的网络层之间的交互方式,用来加速神经网络的训练速度。
Nuxt + Plython 使用Nuxt和Python在Python Web应用程序中解耦模板引擎的基本概念。 在阅读有关此存储库的文章。Nuxt设置 # Dependencies$ npm install# serve with hot reload at localhost:3000$ npm run dev# ...
1.只需要在controller层增加自定义@RequestLog注解就可以实现了。...功能二:是否记录请求日志 功能三:是否记录返回值 功能四:是否以debug形式记录 功能五:日志类型 可灵活进行使用。 具体查询使用说明文档
Cahn-Hilliard-Stokes-Darcy系统解耦数值格式的误差估计_Error estimate of a decoupled numerical scheme for the Cahn-Hilliard-Stokes-Darcy system.pdf
行业分类-设备装置-高刚度并联双驱运动解耦伺服控制平台.zip
用 FNUrlRoute,可以用来解耦模块,使得模块之前的调用独立开来,举个简单的例子,你在 VC、Model 或者 Cell 中直接调用类似Open(xxxPage) 的方式直接打开一个页面(或者唤起一个模块),从而减少代码的冗余。
双同步解耦坐标系锁相环--DDSRFSPLL
MEF模块解耦,WCF Rest 扩展 基础示例