【分布式】日志

谈一谈对python的第三方库 logging 的使用心得

本心得多来自于 logging 库的源码

  • logger = logging.getLoger(): 由此方式得到的是logging中的root,是单例模式
  • logger = logging.getLogger("module_name"):该方式得到的logger也是单例模式,但不是root,如果他的一些属性比如handler,level等没有设置的话,就会继承于root
  • logger 的 handeler 可以进行删除和替换
  • file_handele 还可以指定输出的文件名称

基于以上几点,logger就可以非常灵活了,可以有以下用途:

  • 分布式机器运行的时候可以通过修改 root 的 file_handler 句柄来控制输出文件的名字,可以避免多机写入一个文件,而需要分布式锁的问题【问题一】
  • 同时可以根据任务的细分直接将logger输出文件的名字设置为任务名成,可以避免单机多个任务写在一个文件中【问题二】
  • 以后的前提是root在主节点进行修改,其他节点直接使用 ’logger = logging.getLogger(“module_name”)‘, 这样在单个串行任务中,副节点的 logger 的属性都会随主节点的变化,实现了副节点的logger的属性的自适应调整。

最近在使用的过程中右多了一些见识【20240606】

logging 模块必须要加一个handler,比如说logging 模块中自带的FileHandler,StreamHandler等,这些句柄是logging 模块自带的,所以也是常规操作。但是我们如果有特殊的需求,比如:

  • 发生Error或者Warning的时候邮件通知
  • 想基于ZMQ把消息发送出去(实现分布式日志可以这么做)

在这些情况下我们可以基于继承logging.Handle模块来重写符合自己需求的一些handler, 当然这些需求应该是在 logger.debug, logger.info, logger.warning, logger.error,logger.exception 打印一些东西的同时起作用。手写自己的 handler 一般要有以下几个步骤:

  • 继承 logging.Handle 函数
  • 重写__init__函数
  • 重写emit 函数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值