import os import socket # 获取主机名,方便区分容器 HOSTNAME = socket.gethostname() # 检测日志文件的路径是否存在,不存在则创建 LOG_PATHS = [ f"log/{HOSTNAME}/ucloud", f"log/{HOSTNAME}/error", f"log/{HOSTNAME}/qr", ] for path in LOG_PATHS: if not os.path.exists(path): os.makedirs(path) # 配置字典 LOGGING_CONFIG = { 'version': 1, # 必需,指定配置格式的版本 'disable_existing_loggers': False, # 是否禁用已经存在的logger实例 # formatters定义了不同格式的日志样式 'formatters': { 'standard': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S', }, }, # handlers定义了不同类型的日志处理器 'handlers': { 'console': { 'class': 'logging.StreamHandler', # 控制台处理器 'level': 'DEBUG', 'formatter': 'standard', 'stream': 'ext://sys.stdout', # 输出到标准输出,默认编码跟随系统,一般为UTF-8 }, 'file': { 'class': 'logging.handlers.TimedRotatingFileHandler', # 文件处理器,支持日志滚动 'level': 'INFO', 'formatter': 'standard', 'filename': f'log/{HOSTNAME}/fcb_photo_review.log', # 日志文件路径 'when': 'midnight', 'interval': 1, 'backupCount': 14, # 保留的备份文件数量 'encoding': 'utf-8', # 显式指定文件编码为UTF-8以支持中文 }, 'ucloud': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'INFO', 'formatter': 'standard', 'filename': f'log/{HOSTNAME}/ucloud/fcb_photo_review_ucloud.log', 'when': 'midnight', 'interval': 1, 'backupCount': 14, 'encoding': 'utf-8', }, 'error': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'INFO', 'formatter': 'standard', 'filename': f'log/{HOSTNAME}/error/fcb_photo_review_error.log', 'when': 'midnight', 'interval': 1, 'backupCount': 14, 'encoding': 'utf-8', }, 'qr': { 'class': 'logging.handlers.TimedRotatingFileHandler', 'level': 'INFO', 'formatter': 'standard', 'filename': f'log/{HOSTNAME}/qr/fcb_photo_review_qr.log', 'when': 'midnight', 'interval': 1, 'backupCount': 14, 'encoding': 'utf-8', }, }, # loggers定义了日志记录器 'loggers': { '': { # 根记录器 'handlers': ['console', 'file'], # 关联的处理器 'level': 'DEBUG', # 根记录器的级别 'propagate': False, # 是否向上级传播日志信息 }, 'ucloud': { 'handlers': ['console', 'ucloud'], 'level': 'DEBUG', 'propagate': False, }, 'error': { 'handlers': ['console', 'file', 'error'], 'level': 'DEBUG', 'propagate': False, }, 'qr': { 'handlers': ['console', 'qr'], 'level': 'DEBUG', 'propagate': False, }, }, }