python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python自定义logger模块

Python自定义logger模块的实例代码

作者:码农研究僧

Python标准库中的logging模块提供了日志记录的功能,自定义 Logger 可以根据项目的需求定制化日志记录,满足特定的日志记录格式、输出目标和日志级别等要求,本文给大家介绍了Python自定义logger模块的实例代码,需要的朋友可以参考下

1. 内置logger

Python标准库中的logging模块提供了日志记录的功能

允许开发者通过创建日志记录器、处理程序和格式化器来控制日志的生成和输出

以下是logging模块的一些主要组件和概念:

import logging

# 创建日志记录器
logger = logging.getLogger('码农研究僧')
logger.setLevel(logging.DEBUG)

# 创建处理程序并设置级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 创建格式化器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)

# 将处理程序添加到日志记录器
logger.addHandler(console_handler)

# 记录日志
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

截图如下:

在这里插入图片描述

如果日志记录器设置的登记为WARNING

# 创建日志记录器
logger = logging.getLogger('码农研究僧')
logger.setLevel(logging.WARNING)

则输出结果如下:

在这里插入图片描述

2. 自定义logger

自定义 Logger 可以根据项目的需求定制化日志记录,满足特定的日志记录格式、输出目标和日志级别等要求

通过自定义 Logger,可以实现以下功能:

可以整个拷贝的logger模块:

from datetime import datetime
from os import path
from sys import stdout

from loguru import logger


class MyLogger(object):
    def __init__(self, log_name, level="INFO") -> logger:
        logger.remove()
        fmt = '<level>{time:YYYY-MM-DD HH:mm:ss} | {module}: {level} >> {message}</level>'
        logger.add(stdout, format=fmt)
        self.my_logger = logger
        _today = datetime.today().strftime("%Y_%m_%d")
        log_path = f"{log_name}{_today}.log"
        self.name = path.basename(log_path)
        self.my_logger.add(
            log_path, encoding="utf-8", retention='7 days', rotation="50 MB", compression='zip', format=fmt,
            enqueue=True, level=level)

    def info(self, content):
        self.my_logger.opt(depth=1).info(content)

    def debug(self, content):
        self.my_logger.opt(depth=1).debug(content)

    def error(self, content, *args, **kwargs):
        self.my_logger.opt(depth=1).error(content)
        if len(args) > 0 or len(kwargs) > 0:
            self.exception("Error details:", *args, **kwargs)

    def exception(self, content, *args, **kwargs):
        self.my_logger.opt(depth=1).exception(content, *args, **kwargs)

    def warning(self, content):
        self.my_logger.opt(depth=1).warning(content)

测试如下:

# 创建一个名为 "my_app" 的日志记录器,级别为 INFO
logger = MyLogger("my_app")

# 记录一条 INFO 级别的日志
logger.info("This is an informational message.")

# 记录一条 DEBUG 级别的日志
logger.debug("This is a debug message.")

# 记录一条 ERROR 级别的日志
logger.error("This is an error message.")

# 记录一条 WARNING 级别的日志
logger.warning("This is a warning message.")

# 记录一条 ERROR 级别的日志,并附带额外的参数和关键字参数
logger.error("An error occurred.", "Extra info", custom_param="Custom value")

# 记录一条 ERROR 级别的日志,同时记录异常信息
try:
    result = 1 / 0
except Exception as e:
    logger.exception("An error occurred while performing a calculation.")

截图如下:

在这里插入图片描述

整体logger文件如下:

在这里插入图片描述

以上就是Python自定义logger模块的实例代码的详细内容,更多关于Python自定义logger模块的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文