在需要添加日志的python文件中
#注入
from modules.logger import get_logger
logger = get_logger(__name__,"sql.log")
#日志写入
logger.warning("%s的%s的最大值为None,返回默认的None",\
table_name,select_columns)
""" 日志模块 """
import logging
import os
import tomllib
from logging.handlers import RotatingFileHandler
from modules.ding import dingboot
with open('config.toml', 'rb') as f:
config = tomllib.load(f)
def get_logger(name, log_name="wr.log",):
"""
获取日志对象
:param name: 日志名称 填入 "__name__"
:param log_name: 日志文件名称
usage:
from modules.logger import get_logger
logger = get_logger(__name__)
logger.info("这是一个info 的log信息有%s,%s等信息", param1, param2,)
"""
# 获取日志目录
# log_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "logs")
log_dir = config["DEBUG"]["LOG_DIR"]
if not os.path.exists(log_dir):
os.makedirs(log_dir)
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s - %(levelname)s -"
"[%(filename)s:%(lineno)d] -%(funcName)s - %(message)s")
# 创建一个滚动文件处理器,每个日志文件最大大小为5M,保存5个旧日志文件
rf_handler = RotatingFileHandler(
os.path.join(log_dir, log_name),
maxBytes=5 * 1024 * 1024,
backupCount=5,
encoding="utf-8",
)
rf_handler.setFormatter(formatter)
logger.addHandler(rf_handler)
#如果错误类型是error,则发送邮件通知管理员
error_handler = ErrorNotificationHandler()
error_handler.setFormatter(formatter)
logger.addHandler(error_handler)
# 如果是调试模式,则将日志输出到控制台
is_debug_mode_enabled = config["DEBUG"]["DEBUGMODE_TRIGGER"]
if is_debug_mode_enabled:
#print("Debug mode is on, log will be output to console.")
logger.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
# 自定义 Handler
class ErrorNotificationHandler(logging.Handler):
""" 错误通知 Handler """
def emit(self, record):
if record.levelno == logging.ERROR: # 检查日志级别是否为 ERROR
error_message = self.format(record) # 获取日志消息
dingboot(config['DINGDING']['ROBOT_URL'],">-<"+error_message) # 调用通知函数
if __name__ == '__main__':
LOGGER = get_logger(__name__)
LOGGER.error("这是一个ERROR 的log信息有%s,%s等信息", "param1", "param2")
评论 (0)