Python logging是不太支持多线程的,要不然可能会重复写很多日志使进程变慢。这里选择 QueueHandler 和 QueueListener 处理 flask 日志,其他线程调用 QueueHandler 往queue里发送日志消息,启动一个监听线程 QueueListener 调用 TimedRotatingFileHandler 从queue里获取日志消息,往日志文件里写日志。
import queue
import logging
from logging.handlers import QueueHandler
from logging.handlers import QueueListener, TimedRotatingFileHandler
from logging import FileHandler
import datetime, time
import threading
import re
import os
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s : %(message)s')
log_que = queue.Queue(-1)
queue_handler = QueueHandler(log_que)
def send_logger_demo():
logger = logging.getLogger()
logger.addHandler(queue_handler)
logger.setLevel(logging.INFO)
def start_log_service():
log_path = os.environ['HOME'] + "/sphinx_log"
if not os.path.exists(log_path):
os.makedirs(log_path)
handler = TimedRotatingFileHandler(filename=log_path + "/sphinx.log", when="S", interval=1, backupCount=5)
handler.suffix = "%Y-%m-%d.log"
handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{