天津做网站,电子商务网站的设计要素,织梦网站搜索页点击返回首页没有反应,青岛网页制作网站在多线程中将logging.info输出到不同的文件中#xff0c;可以使用Python标准库中的Queue和Thread模块。具体实现步骤如下#xff1a;
创建多个Queue队列用于不同线程的日志输出#xff0c;每个队列对应一个日志文件。
import queue# 创建三个队列用于不同线程的日志输出
l…在多线程中将logging.info输出到不同的文件中可以使用Python标准库中的Queue和Thread模块。具体实现步骤如下
创建多个Queue队列用于不同线程的日志输出每个队列对应一个日志文件。
import queue# 创建三个队列用于不同线程的日志输出
log_q1 queue.Queue()
log_q2 queue.Queue()
log_q3 queue.Queue()创建多个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)创建多个线程在每个线程中从相应的队列中获取日志信息并输出到相应的文件中。
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(targetworker1)
t1.start()t2 threading.Thread(targetworker2)
t2.start()t3 threading.Thread(targetworker3)
t3.start()在主线程中使用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名称、日志级别、消息内容等信息。