Python自定义logger模块的实例代码
作者:码农研究僧
Python标准库中的logging模块提供了日志记录的功能,自定义 Logger 可以根据项目的需求定制化日志记录,满足特定的日志记录格式、输出目标和日志级别等要求,本文给大家介绍了Python自定义logger模块的实例代码,需要的朋友可以参考下
1. 内置logger
Python标准库中的logging模块提供了日志记录的功能
允许开发者通过创建日志记录器、处理程序和格式化器来控制日志的生成和输出
以下是logging模块的一些主要组件和概念:
- 日志记录器 (Logger):整个日志系统的主要入口点
每个日志记录操作都通过一个特定的日志记录器来执行。通常,每个模块或子系统都会创建自己的日志记录器
使用logging.getLogger(name)
方法来获取或创建一个日志记录器,其中name参数是日志记录器的名称。如果省略name参数,则返回根日志记录器 - 处理程序 (Handler):
负责将日志记录发送到指定的目标,比如控制台、文件、网络等
通过logging.StreamHandler
、logging.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模块的资料请关注脚本之家其它相关文章!