假定你在编写一个非常牛X的程序库,姑且为它取名为 foo,里面有一个函数叫 bar,你就想啊,这么牛X的一个函数,肯定要写一下 log 啊,所以你就写了以下代码:
def bar():
print 'Haha, Calling bar().'
do_sth()
你高高兴兴发了版本,大家都过得很好。过了几天,公司的另一个项目组听闻牛人您写了个库叫 foo,非常好用,就拿去用了。当天,快下班的时候,你被拖去救火,因为出 Bug 了呀。你查看了很久日志,都没有发现他们调用 bar() 的痕迹,一问,原来他们是用 logging 的,标准输出在做 Daemon 的时候被重定向到 /dev/null 去了……。
好吧,你忍。但没法忍啊,你们原来的项目又不用 logging,你在程序库里引入 logging 谁来初始化它呢?就算你引入了 logging,你们项目获取 logger 可能是用 logging.getLogger('prjA'),另一个项目可能是用 logging.getLogger('prjB'),日后还有新项目呢,想到这个你就蛋疼了。忍痛割爱,把 print 语句给删除掉?你又怕日后出了问题你自己都找不到 Bug 那还不是自己加班自己苦……。
这个时候,不妨让 python-message 来帮你手,轻松改一下 bar() 函数
import message
LOG_MSG = ('log', 'foo')
def bar():
messeage.pub(LOG_MSG, 'Haha, Calling bar().')
do_sth()
而在你的项目中,只需要在项目开始处加上这样的代码:
import message
import foo
def handle_foo_log_msg(txt):
print txt
message.sub(foo.LOG_MSG, handle_foo_log_msg)
而很类似地,在另一个项目 prjA 里,你可以把 handle_foo_log_msg() 稍作修改:
def handle_foo_log_msg(txt):
import logging
logging.debug(txt)
在另一个 prjB 里则可能是这样:
import logging
logger = logging.getLogger("prjB")
def handle_foo_log_msg(txt):
logger.debug(txt)
如果还有另一个 prjC 使用了其它的 log,相信此时你也可以轻松应对了,:)
分享到:
相关推荐
Python-jrpc是一个基于JSON-RPC 2.0标准的Python远程调用框架,它允许不同进程或计算机间的程序调用对方的方法,就像它们在同一个进程中一样。这种技术在分布式系统和微服务架构中非常常见,因为可以实现服务之间的...
**Python库 django-aws-message-1.4** Python是一种广泛使用的高级编程语言,以其简洁、易读的语法和丰富的库生态系统而闻名。在本资源中,我们关注的是一个名为`django-aws-message`的库,它与Django框架集成,为...
《Python库Celery-message-consumer 1.0.9:构建高效分布式系统的关键组件》 在现代软件开发中,Python以其简洁的语法和强大的库生态系统成为后端开发的热门选择。其中,Celery-message-consumer作为一款强大的工具...
PyPI(Python Package Index)是Python开发者的宝藏库,它提供了大量的Python库和模块,方便开发者进行软件开发。本篇文章将深入探讨PyPI中的"okapi-python-connector-2019.9.tar.gz"资源,这是一个专为Python设计的...
2. **RabbitMQ** - 是一个消息代理和队列服务器,使用AMQP协议,Python有pika库与其交互,常用于实现分布式系统中的异步任务处理和解耦。 3. **Celery** - 是一个基于分布式消息传递的异步任务队列,使用简单且高效...
PyPI(Python Package Index)是Python开发者的重要资源库,提供了大量的开源Python库供全球用户下载和使用。本文将深入探讨在PyPI官网上下载的“tencentcloud-sdk-python-cmq-3.0.538.tar.gz”资源,它是腾讯云提供...
在实际使用`qpid-python`时,开发者需要了解AMQP的基本概念,如exchange(交换机)、queue(队列)、binding(绑定)等,并熟悉如何使用库提供的API创建连接、建立会话、发送和接收消息。通过`qpid-python`,Python...
PyPI是Python开发者发布和分享他们创建的Python库的地方,使得其他用户可以方便地安装和使用这些库。"ioc"通常指的是"Inversion of Control"或"依赖注入",这是一种设计模式,用于提高代码的灵活性和可测试性。 ...
在给定的“Python-基于socket的MVC服务器框架”中,我们可以深入探讨如何使用Python的socket库来构建一个简单但功能完备的MVC(模型-视图-控制器)架构的服务器。MVC模式是一种软件设计模式,它将应用程序分为三个...
【Python-通过SQS自动化无服务器日志记录到S3】是关于利用Python编程语言,结合Amazon Simple Queue Service (SQS) 和 Amazon Simple Storage Service (S3) 的一种实践,以实现日志处理的自动化。在云环境中,尤其是...
这个库使得开发者可以使用Python语言来操作和管理腾讯云上的资源,大大简化了云服务的集成和使用流程。 二、DS模块详解 在“tencentcloud-sdk-python-ds”中,“DS”代表Data Structure Service,这是一个腾讯云...
在Python开发领域,PyPI(Python Package Index)是全球开发者广泛使用的软件包仓库,它为Python开发者提供了便捷地分享和安装第三方库的平台。本篇文章将详细介绍通过PyPI官网下载的资源——tencentcloud-sdk-...
本文将深入探讨"python-di"这一特定库,版本为1.1.1,它封装在名为"python-di-1.1.1.tar.gz"的压缩包文件中。 "python-di",全称Dependency Injector,是一个轻量级的依赖注入框架,旨在帮助开发者更好地管理代码中...
"PyEventE"是一个Python事件库,它允许程序员通过发布和订阅事件的方式来解耦代码,实现模块间的通信。 事件驱动编程是一种编程范式,其中程序由一个或多个事件处理器组成,这些处理器等待特定的事件发生,如用户...
总之,Python-Qlkit是一个以OmNext为灵感来源的Python网页开发框架,它结合了ClojureScript的先进理念和Python的广泛社区支持,为Python开发者提供了一种高效、声明式的Web开发方式。通过深入研究其源码和文档,我们...
此库是Python开发者用来管理对象间的依赖关系,使得代码更加灵活和解耦。 依赖注入的核心思想是将对象依赖的服务或组件作为参数传递给对象,而不是由对象自行创建或查找这些依赖。这样做可以降低对象间的耦合度,使...
"Python-Django消息库用于从传输方法中分离内容"这一主题,主要关注的是Django框架中的消息系统,它是如何帮助开发者实现应用内消息传递并解耦内容与传输方式的。 Django的消息系统允许开发者存储用户相关的状态...
在Python编程中,轮询和回调是两种常见的异步编程技术,它们在处理网络请求、数据获取和事件驱动编程中发挥着重要作用。...同时,它也鼓励了良好的编程实践,如代码的解耦和模块化,有助于团队协作和代码的长期维护。
`python-dependency-injector`是一个强大且易用的依赖注入框架,它为Python开发者提供了管理复杂应用程序中依赖关系的有效工具。通过使用这个框架,你可以编写更加灵活、可测试和可维护的代码,从而提升软件质量。...
Python SDK,全称为Software Development Kit,是一组工具、文档和库的集合,用于简化编程过程,特别是与特定平台或服务的集成。在这个案例中,tencentcloud-sdk-python-zj提供了与腾讯云服务接口的封装,使得开发者...