50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
# flask_app/logger_setup.py
|
||
|
||
import logging
|
||
import uuid
|
||
from datetime import datetime, timedelta
|
||
from flask import g
|
||
import os
|
||
|
||
class CSTFormatter(logging.Formatter):
|
||
"""自定义的 Formatter,将日志的时间戳调整为中国标准时间(UTC+8)"""
|
||
|
||
def formatTime(self, record, datefmt=None):
|
||
ct = datetime.fromtimestamp(record.created) + timedelta(hours=8)
|
||
if datefmt:
|
||
s = ct.strftime(datefmt)
|
||
else:
|
||
try:
|
||
s = ct.strftime("%Y-%m-%d %H:%M:%S")
|
||
if self.usesTime():
|
||
s = f"{s},{record.msecs:03d}"
|
||
except ValueError:
|
||
s = ct.strftime("%Y-%m-%d %H:%M:%S")
|
||
return s
|
||
|
||
def create_logger(app, subfolder):
|
||
"""
|
||
创建一个唯一的 logger 和对应的输出文件夹。
|
||
|
||
参数:
|
||
subfolder (str): 子文件夹名称,如 'output1', 'output2', 'output3'
|
||
"""
|
||
unique_id = str(uuid.uuid4())
|
||
g.unique_id = unique_id
|
||
output_folder = os.path.join("flask_app", "static", "output", subfolder, unique_id)
|
||
os.makedirs(output_folder, exist_ok=True)
|
||
log_filename = "log.txt"
|
||
log_path = os.path.join(output_folder, log_filename)
|
||
logger = logging.getLogger(unique_id)
|
||
if not logger.handlers:
|
||
file_handler = logging.FileHandler(log_path)
|
||
file_formatter = CSTFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||
file_handler.setFormatter(file_formatter)
|
||
logger.addHandler(file_handler)
|
||
stream_handler = logging.StreamHandler()
|
||
stream_handler.setFormatter(logging.Formatter('%(message)s'))
|
||
logger.addHandler(stream_handler)
|
||
logger.setLevel(logging.INFO)
|
||
g.logger = logger
|
||
g.output_folder = output_folder
|