Files
ylt_diy/lib/logger.py
2026-07-20 16:42:56 +08:00

97 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import sys
import logging
from logging.handlers import RotatingFileHandler
from datetime import datetime
_loggers = {}
def get_logger(name='app'):
"""
获取日志记录器
Args:
name: 日志名称(对应日志文件名)
Returns:
logging.Logger: 日志记录器
"""
if name in _loggers:
return _loggers[name]
# 日志目录
log_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'logs')
os.makedirs(log_dir, exist_ok=True)
# 日志文件路径
log_file = os.path.join(log_dir, f'{name}.log')
# 创建 logger
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
logger.propagate = False
# 避免重复添加 handler
if logger.handlers:
_loggers[name] = logger
return logger
# 日志格式
formatter = logging.Formatter(
'%(asctime)s | %(levelname)-7s | %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# 文件 handler按大小轮转最多 5 个备份,每个 10MB
file_handler = RotatingFileHandler(
log_file,
maxBytes=10 * 1024 * 1024,
backupCount=5,
encoding='utf-8'
)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 控制台 handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
_loggers[name] = logger
return logger
def log_info(message, module='app'):
"""记录信息日志"""
get_logger(module).info(message)
def log_error(message, module='app', exc_info=True):
"""记录错误日志
Args:
message: 错误信息
module: 模块名
exc_info: 是否包含异常堆栈默认True在except块中调用时自动打印堆栈
"""
logger = get_logger(module)
logger.error(message)
if exc_info:
import traceback
tb = traceback.format_exc()
if 'NoneType: None' not in tb:
logger.error(tb)
def log_warning(message, module='app'):
"""记录警告日志"""
get_logger(module).warning(message)
def log_debug(message, module='app'):
"""记录调试日志"""
get_logger(module).debug(message)