当前位置: 首页 > news >正文

[python] 在多线程中将`logging.info`输出到不同的文件中 (生产者消费者)

在多线程中将logging.info输出到不同的文件中,可以使用Python标准库中的QueueThread模块。具体实现步骤如下:

  1. 创建多个Queue队列用于不同线程的日志输出,每个队列对应一个日志文件。
import queue# 创建三个队列用于不同线程的日志输出
log_q1 = queue.Queue()
log_q2 = queue.Queue()
log_q3 = queue.Queue()
  1. 创建多个Handler对象,分别处理不同的队列,并设置不同的输出格式和日志级别。
import logging# 配置日志记录器
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)# 定义输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 创建三个handler,分别处理不同的队列
handler1 = logging.FileHandler("log1.txt")
handler1.setFormatter(formatter)
handler1.setLevel(logging.ERROR)
handler1.setStream(log_q1)handler2 = logging.FileHandler("log2.txt")
handler2.setFormatter(formatter)
handler2.setLevel(logging.WARNING)
handler2.setStream(log_q2)handler3 = logging.FileHandler("log3.txt")
handler3.setFormatter(formatter)
handler3.setLevel(logging.INFO)
handler3.setStream(log_q3)# 将三个handler添加到logger中
logger.addHandler(handler1)
logger.addHandler(handler2)
logger.addHandler(handler3)
  1. 创建多个线程,在每个线程中从相应的队列中获取日志信息并输出到相应的文件中。
import threadingdef worker1():while True:try:record = log_q1.get()if record is None:breaklogger.handle(record)except Exception:passdef worker2():while True:try:record = log_q2.get()if record is None:breaklogger.handle(record)except Exception:passdef worker3():while True:try:record = log_q3.get()if record is None:breaklogger.handle(record)except Exception:passt1 = threading.Thread(target=worker1)
t1.start()t2 = threading.Thread(target=worker2)
t2.start()t3 = threading.Thread(target=worker3)
t3.start()
  1. 在主线程中使用logging.info等函数输出日志,将日志信息放入相应的队列中即可。
# 在主线程中使用logging.info等函数输出日志,将日志信息放入相应的队列中
log_q1.put(logging.makeRecord("logger1", logging.ERROR, "test message", (), None, None, None))
log_q2.put(logging.makeRecord("logger2", logging.WARNING, "test message", (), None, None, None))
log_q3.put(logging.makeRecord("logger3", logging.INFO, "test message", (), None, None, None))

通过以上步骤,即可实现多线程中将logging.info输出到不同的文件中。需要注意的是,在使用Queue传递日志信息时,需要使用logging.makeRecord()方法创建LogRecord对象,并指定相应的logger名称、日志级别、消息内容等信息。

http://www.lryc.cn/news/219507.html

相关文章:

  • MySQL进阶_5.逻辑架构和SQL执行流程
  • 【油猴脚本】学习笔记
  • 宝塔面板使用Supervisor进程守护插件,配置守护Mysql的操作教程。
  • Electron[2] Electron使用准备
  • npm create vue@latest 原理
  • 【Unity基础】7.动画状态参数
  • C语言映射表在串口数据解析中的应用
  • 叁[3],感兴趣区域ROI
  • 文件数据交换格式说明
  • 2023NOIP A层联测24 总结
  • vue3 项目如何配置测试环境打包
  • 【CSS】样式的计算过程
  • 【ArcGIS微课1000例】0076:KMZ转换KML的方法
  • Python基础入门例程46-NP46 菜品的价格(条件语句)
  • Docker数据管理、网络与Cgroup资源限制
  • ubuntu strings | grep使用说明
  • <Vue>使用依赖注入的方式共享数据
  • 从0到1:腾讯云服务器使用教程
  • VScode + opencv + c++ + win配置教程
  • 机器学习---SVM目标函数求解,SMO算法
  • 044_第三代软件开发-保存PDF
  • 2023红帽论坛:构建开放AI生态,助力企业数字革新之路
  • 阿里云国际站和华为云国际站之间该如何选择?
  • JavaScript设计模式之责任链模式
  • 云安全—kubelet攻击面
  • leetcode经典面试150题---5.多数元素
  • Vue ElementUI el-tooltip 全局样式修改
  • MATLAB_5MW风电永磁直驱发电机-1200V直流并网MATLAB仿真模型
  • 11.4商业伦理(全)
  • 【漏洞复现】S2-045 Remote Code Execution(CVE-2017-5638)