logging 分线程\进程输出日志文件

背景

前段时间,将公司框架的日志机制从所有线程\进程都输出日志到一个文件里,改造成线程\进程将各自的日志输出到各自的日志文件里,由于公司是内网涉密环境,所有资料都无法带出,这里总结仅描述思路。

假设通过logging模块封装好后可供调用的日志方法是:

myInfo(msg)

改造前

所有线程\进程调用myInfo,myInfo中使用的都是同一个加载同样文件处理器的记录器。所以不同的线程\进程,日志出口都是同一个文件。

改造后

  • 框架依然调用myInfo(msg)方法输出日志。区别在于,在myInfo执行时,会使用当前线程\进程的记录器去输出日志,每个线程\进程都会创建不同的记录器,且每个线程\进程的记录器都加载不同的文件处理器。
  • 提前创建好一个字典列表对象,用于缓存记录器对象。[{线程\进程名字:记录器对象},{线程\进程名字:记录器对象}]
  • 在myInfo执行时,会判断当前线程\进程的记录器对象是否已经存在,判断方法是通过当前线程\进程独特的字符串标志(比如说线程\进程名字),是否包含在上述字典列表里。
  • 如果是,则从字典列表里取出记录器对象。如果否,则创建记录器对象,同时将该对象加入到字典列表中。
  • 创建记录器对象时,不同的线程\进程应该加载不同的文件处理器。

下图是各个线程/进程对应的记录器、处理器、格式器的关系。
不同线程/进程的格式器可以是相同,但记录器和处理器需要不同。
在这里插入图片描述

tips

如果暂时不了解记录器和处理器的含义,请先了解logging模块中的Logger,filter,formatter,handler几大对象。其中Logger是记录器,filter是过滤器,formatter是格式器,handler是处理器。可百度这几个对象的含义和用法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值