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实现的ID3决策树功能示例

    基于Python实现的ID3决策树功能示例

    这篇文章主要介绍了基于Python实现的ID3决策树功能,简单描述了ID3决策树的相关概念,并结合实例形式分析了Python实现ID3决策树的具体定义与使用技巧,需要的朋友可以参考下
    2018-01-01
  • python创建列表并给列表赋初始值的方法

    python创建列表并给列表赋初始值的方法

    这篇文章主要介绍了python创建列表并给列表赋初始值的方法,涉及Python列表的定义与赋值技巧,需要的朋友可以参考下
    2015-07-07
  • Python osgeo库安装失败问题的解决方案

    Python osgeo库安装失败问题的解决方案

    Osgeo是一个支持开源地理空间数据处理的基金会,我们可以在python中使用“osgeo”库来访问其提供的高效地理空间数据,在PyCharm安装osgeo库的时候,显示报错,所以本文记录一下解决这个麻烦的步骤,需要的朋友可以参考下
    2025-04-04
  • Django视图函数的具体使用

    Django视图函数的具体使用

    这篇文章主要介绍了Django视图函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python将依赖和源码打包在一起的方法

    python将依赖和源码打包在一起的方法

    Python 项目在不同环境中部署时,经常会遇到安装依赖的问题,为了避免多个环境引起的重复劳动,可以将依赖和源码打包在一起交付,本文就给大家详解介绍了将依赖和源码打包在一起的方法,需要的朋友可以参考下
    2023-06-06
  • python使用paramiko模块通过ssh2协议对交换机进行配置的方法

    python使用paramiko模块通过ssh2协议对交换机进行配置的方法

    今天小编就为大家分享一篇python使用paramiko模块通过ssh2协议对交换机进行配置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • PyTorch 随机数生成占用 CPU 过高的解决方法

    PyTorch 随机数生成占用 CPU 过高的解决方法

    今天小编就为大家分享一篇PyTorch 随机数生成占用 CPU 过高的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Tensorflow实现多GPU并行方式

    Tensorflow实现多GPU并行方式

    今天小编就为大家分享一篇Tensorflow实现多GPU并行方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python 利用Pyinstaller打包Web项目

    python 利用Pyinstaller打包Web项目

    这篇文章主要介绍了python 利用Pyinstaller打包Web项目,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-10-10
  • Python利用multiprocessing实现最简单的分布式作业调度系统实例

    Python利用multiprocessing实现最简单的分布式作业调度系统实例

    这篇文章主要给大家介绍了关于Python利用multiprocessing如何实现最简单的分布式作业调度系统的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-11-11

最新评论