import logging from logging.handlers import RotatingFileHandler, QueueHandler from multiprocessing import Process class MultiProcessQueueLoggingListner(Process): def __init__(self, name, queue): super().__init__() self.name = name self.queue = queue self.logger = logging.getLogger(name) self.file_handler = RotatingFileHandler(name, maxBytes=536870912, backupCount=2) self.formatter = logging.Formatter('%(asctime)s %(processName)-10s %(name)s %(levelname)-8s %(message)s') self.file_handler.setFormatter(self.formatter) self.logger.addHandler(self.file_handler) def run(self): while True: try: record = self.queue.get() if record is None: break self.logger.handle(record) except Exception: import sys, traceback print('Whoops! Problem:', file=sys.stderr) traceback.print_exc(file=sys.stderr) class MulitProcessQueueLogger(object): def __init__(self, name, queue): self.name = name self.queue = queue self.queue_handler = QueueHandler(queue) self.logger = logging.getLogger(name) self.logger.addHandler(self.queue_handler) self.logger.setLevel(logging.DEBUG)
测试代码如下:
import multi_process_logging import multiprocessing from time import sleep def worker(po): name = multiprocessing.current_process().name po = multi_process_logging.MulitProcessQueueLogger('test.log', q) print("In worker") for i in range(10): po.logger.info(f"Logging from {name} line {i}") po.queue.put(None) def main(): q = multiprocessing.Queue() lp = multi_process_logging.MultiProcessQueueLoggingListner('test.log', q) lp.start() p = multiprocessing.Process(target=worker, args=(q,)) p.start() p.join() lp.join() if __name__ == '__main__': main()总结
至此,大部分python打印日志的场景使用方式都讲解到了,希望对读者有所帮助 。
【python日志包从头到尾讲清楚】
推荐阅读
- 你的钱包已被“共享”!揭秘“共享屏幕”骗局
- 硕士毕业答辩PPT应该包括哪些内容?
- 商标授权合同备案申请资料包括什么?
- 辛辣食物有哪些
- 自己包的粽子要煮多久才能熟 自己包的粽子要煮多久
- 许娣|《星汉灿烂》:再次被许娣圈粉,变行走的表情包,表演非常的吸睛
- 姐夫出轨小姨子、坏儿媳怂恿儿子虐待母亲……情感主播花式“收割”老年粉丝钱包
- 糯米泡多久可以包粽子怎么包 糯米泡多久可以包粽子
- 粽子怎样包法 粽子怎样包
- “闲鱼”买2000元LV包变旧衣服?卖家拒退款并拉黑,投诉反遭污蔑
