Python自定义logger模块(附Demo)

目录

  • 1. 内置logger
  • 2. 自定义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 stdoutfrom loguru import loggerclass 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文件如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491535.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改element-UI组件样式

修改提示文字颜色 也就是 placeholder 的提示信息的颜色&#xff1b;也就是输入框为空白时&#xff0c;其内部的提示文字的样式 ::v-deep .el-input__inner::placeholder {color: white; }表单禁用后项目背景颜色 form表单禁用后背景色仍用白色&#xff0c;字体灰黑色&#…

从Unity到Three.js(outline 模型描边功能)

指定模型高亮功能&#xff0c;附带设置背景颜色&#xff0c;获取随机数方法。 百度查看说是gltf格式的模型可以携带PBR材质信息&#xff0c;如果可以这样&#xff0c;那就完全可以在blender中配置好材质导出了&#xff0c;也就不需要像在unity中调整参数了。 import * as THRE…

Python读写XML文件的技术指南【第100篇—读写XML文件】

Python读写XML文件的技术指南 在软件开发中&#xff0c;XML&#xff08;可扩展标记语言&#xff09;是一种广泛用于数据存储和交换的格式。Python作为一门强大而灵活的编程语言&#xff0c;提供了许多库和工具来处理XML文件。本篇技术博客将介绍如何使用Python读写XML文件&…

Folx Pro Mac中文p破解版如何使用?为您带来Folx Pro 详细使用教程!

​ Folx pro 5 中文版是mac上一款功能强大的老牌加速下载软件&#xff0c;新版本的Folx pro整体界面非常的简洁和漂亮&#xff0c;具有非常好用的分类管理功能&#xff0c;支持高速下载、定时下载、速度控制、iTunes集成等功能。Folx pro兼容主流的浏览器&#xff0c;不但可以下…

ABC342 A-G

HUAWEI Programming Contest 2024&#xff08;AtCoder Beginner Contest 342&#xff09; - AtCoder 被薄纱的一场 A - Yay! 题意&#xff1a; 给出一串仅由两种小写字母构成的字符串&#xff0c;其中一种小写字母仅出现一次&#xff0c;输出那个仅出现一次的小写字母的位置…

2024-02-25 Unity 编辑器开发之编辑器拓展7 —— Inspector 窗口拓展

文章目录 1 SerializedObject 和 SerializedProperty2 自定义显示步骤3 数组、List 自定义显示3.1 基础方式3.2 自定义方式 4 自定义属性自定义显示4.1 基础方式4.2 自定义方式 5 字典自定义显示5.1 SerizlizeField5.2 ISerializationCallbackReceiver5.3 代码示例 1 Serialize…

第三节:kafka sarama 遇到Bug?

文章目录 前言一、先上结果二、刨根问底总结 前言 前面两节&#xff0c;我们已经简单应用了sarama的两个类型Client和ClusterAdmin&#xff0c;其中有一个案例是获取集群的ControllerId&#xff0c;但是在后面的测试过程过程中&#xff0c;发现一个问题&#xff0c;返回的Cont…

北航复试知识点总结

2024.2.25 住行 报道+机试+两天面试=4天 面试流程 (每个人大概20min,早一点到考场!) 形式:5位老师(一记录,四提问) 老师 陆峰 办公地址:北京航空航天大学新主楼H1033 电子邮箱: lufeng@buaa.edu.cn 个人主页:http://shi.buaa.edu.cn/lufeng/ 面试礼仪 于无形中…

锂电池SOC估计 | PyTorch实现基于Basisformer模型的锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 PyTorch实现基于Basisformer模型的锂电池SOC估计 锂电池SOC估计&#xff0c;全新【Basisformer】时间序列预测 1.采用自适应监督自监督对比学习方法学习时序特征&#xff1b; 2.通过双向交叉注意力机制计算历史序列和…

《Docker 简易速速上手小册》第9章 Docker 与持续集成(2024 最新版)

文章目录 9.1 持续集成的基本概念9.1.1 重点基础知识9.1.2 重点案例&#xff1a;Python Web 应用的 CI 流程9.1.3 拓展案例 1&#xff1a;Python 数据分析项目的 CI9.1.4 拓展案例 2&#xff1a;Python 微服务的 CI/CD 9.2 Docker 在 CI/CD 中的应用9.2.1 重点基础知识9.2.2 重…

MATLAB练习题:违背直觉的三门问题(非常有趣的一道题目)

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 三门问题&#xff08;Monty Hall problem&#xff09;又称蒙提…

MATLAB环境下基于图像处理的视网膜图像血管分割

预防糖尿病对每个人的健康至关重要&#xff0c;而糖尿病的早期症状在眼底视网膜血管会有所体现&#xff0c;如静脉血管扩张、轻度弯曲等。高血压作为常见疾病&#xff0c;在中国有多达2.45亿的患者。高血压的病情也会在眼底视网膜血管上有所体现&#xff0c;如交叉压迫征等反映…