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

 更新时间:2024年02月26日 10:46:13   作者:码农研究僧  
Python标准库中的logging模块提供了日志记录的功能,自定义 Logger 可以根据项目的需求定制化日志记录,满足特定的日志记录格式、输出目标和日志级别等要求,本文给大家介绍了Python自定义logger模块的实例代码,需要的朋友可以参考下

1. 内置logger

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

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

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

  • 日志记录器 (Logger):整个日志系统的主要入口点
    每个日志记录操作都通过一个特定的日志记录器来执行。通常,每个模块或子系统都会创建自己的日志记录器
    使用logging.getLogger(name)方法来获取或创建一个日志记录器,其中name参数是日志记录器的名称。如果省略name参数,则返回根日志记录器
  • 处理程序 (Handler)
    负责将日志记录发送到指定的目标,比如控制台、文件、网络等
    通过logging.StreamHandlerlogging.FileHandler等类来创建不同类型的处理程序
  • 格式化器 (Formatter):定义了日志消息的外观
    通过指定格式字符串来自定义日志消息的格式 或者 使用logging.Formatter类创建格式化器
  • 日志级别 (Log Level)
    日志级别用于表示日志消息的重要性或严重程度,按严重程度从低到高排序:DEBUG、INFO、WARNING、ERROR、CRITICAL
    日志记录器和处理程序可以设置最小日志级别,只有达到或超过该级别的日志消息才会被处理
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 的功能,如添加日志的归档、压缩、加密等功能

可以整个拷贝的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模块的资料请关注脚本之家其它相关文章!

相关文章

  • Python插入Elasticsearch操作方法解析

    Python插入Elasticsearch操作方法解析

    这篇文章主要介绍了Python插入Elasticsearch操作方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • opencv-python图像读写模块示例详解

    opencv-python图像读写模块示例详解

    这篇文章主要介绍了opencv-python图像读写模块,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Django admin model 汉化显示文字的实现方法

    Django admin model 汉化显示文字的实现方法

    今天小编就为大家分享一篇Django admin model 汉化显示文字的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python可视化Tkinter进阶grid布局详情

    Python可视化Tkinter进阶grid布局详情

    这篇文章主要介绍了Python可视化Tkinter进阶grid布局详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 基于Python编写一个刷题练习系统

    基于Python编写一个刷题练习系统

    这篇文章主要为大家详细介绍了如何基于Python语言编写一个简单的刷题练习系统,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02
  • Python中的生成器

    Python中的生成器

    这篇文章主要介绍了Python中的生成器
    2021-12-12
  • 使用PyQt的QLabel组件实现选定目标框功能的方法示例

    使用PyQt的QLabel组件实现选定目标框功能的方法示例

    这篇文章主要介绍了使用PyQt的QLabel组件实现选定目标框功能的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • python使用多线程查询数据库的实现示例

    python使用多线程查询数据库的实现示例

    这篇文章主要介绍了python使用多线程查询数据库的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python使用xlrd与xlwt对excel的读写和格式设定

    python使用xlrd与xlwt对excel的读写和格式设定

    最近在用python处理excel表的时候出现了一些问题,所以想着记录下最后的实现方式和问题解决方法。方便自己或者大家在有需要的时候参考借鉴,下面这篇文章主要就介绍了python使用xlrd与xlwt对excel的读写和格式设定的相关资料,一起来学习学习吧。
    2017-01-01
  • Python实现变量数值交换及判断数组是否含有某个元素的方法

    Python实现变量数值交换及判断数组是否含有某个元素的方法

    这篇文章主要介绍了Python实现变量数值交换及判断数组是否含有某个元素的方法,涉及Python字符串与数组的相关赋值、判断操作技巧,需要的朋友可以参考下
    2017-09-09

最新评论