一个比较好用的python logger脚本
标签搜索
侧边栏壁纸
博主昵称
小冷柠's Blog

真正的智慧是让人承认自己的无知

  • 累计撰写 76 篇文章
  • 累计收到 0 条评论

目录

一个比较好用的python logger脚本

irx999
2024-11-05 / 0 评论 / 35 阅读 / 正在检测是否收录...

在需要添加日志的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")
1

评论 (0)

取消