python-日志模块以及实际使用设计

这篇具有很好参考价值的文章主要介绍了python-日志模块以及实际使用设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python-日志模块以及实际使用设计

1. 基本组成

日志模块四个组成部分:

  1. 日志对象:产生日志信息
  2. 日志处理器:将日志信息输出到指定地方,例如终端、文件。
  3. 格式器:在日志处理器输出之前,对信息进行各方面的美化。
  4. 过滤器:在日志处理器输出之前,将信息按照过滤器的条件过滤一遍。比如按照日志级别进行过滤。

日志本质上就是如下流程:

日志级别:

  1. logging.DEBUG,是个int数,等于10
  2. logging.INFO == 20
  3. logging.WARNING == 30
  4. logging.ERROR == 40
  5. logging.CRITICAL == 50
2. 基本使用-在终端打印日志

logging.StreamHandler将日志信息输出到终端上。

import logging 

# 1,创建日志对象
logger = logging.getLogger() 

# 2,设置日志对象级别,INFO以及INFO以上信息被输出。
# 本质上就是自己规定哪些信息属于INFO级别,比如正常运行的记录。
logger.setLevel(logging.INFO) 

# 3,创建日志处理器
# 将日志处理器加入到日志对象中,可以绑定多个。
# 绑定终端处理器,将日志信息输出到终端上。
stream_handler_1 = logging.StreamHandler()
stream_handler_2 = logging.StreamHandler()
logger.addHandler(stream_handler_1)
# 绑定第二个终端处理器。
logger.addHandler(stream_handler_2)

# 4,日志对象产生日志信息
# 日志对象可以产生五种级别的日志信息。
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')
3. 基本使用-日志打印到文件

本质就是更换日志处理器,利用logging.FileHandler()将日志信息输出到文件内。

import logging

logger = logging.getLogger()
# 设置日志最低级别。
logger.setLevel(logging.INFO)

# 绑定第一个文件处理器, 将日志信息输出到文件内。
file_handler = logging.FileHandler(filename='../logs/test.log', mode='a', encoding='utf8')
logger.addHandler(file_handler)
# 绑定第二个终端处理器,将日志信息输出到终端上。
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)


# 日志对象产生日志信息
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')
4. 基本使用-使用格式器美化日志信息
  1. 创建方法:使用logging.Formatter()。
  2. 使用方法:处理器绑定格式器。通过setFormatter()方法进行绑定。
  3. 使用目的:日志信息需要提供功能:查看什么时间哪个文件的哪一行发生了什么情况。
import logging

logger = logging.getLogger()

# 设置日志最低级别。
logger.setLevel(logging.INFO)

# 绑定终端处理器
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)

# 绑定文件处理器
file_handler = logging.FileHandler(filename='../logs/test.log', mode='a', encoding='utf8')
logger.addHandler(file_handler)

# 创建格式器
# asctime:时间。
# levelname: 日志信息级别。
# filename: 输出日志信息代码所在的文件名称。
# lineno:输出语句所在文件的行数。
# message: 日志信息。
fmt = logging.Formatter('%(asctime)s - [%(levelname)s] - %(filename)s[%(lineno)d]:%(message)s')

# 将格式器绑定到处理器上
stream_handler.setFormatter(fmt)
file_handler.setFormatter(fmt)

# 日志对象产生日志信息
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')

# 终端中会输出如下信息:
'''
2024-01-06 18:42:43,755 - [INFO] - 1.py[25]:这是一个info级别的日志信息
2024-01-06 18:42:43,756 - [WARNING] - 1.py[26]:这是一个warning级别的日志信息
2024-01-06 18:42:43,756 - [ERROR] - 1.py[27]:这是一个error级别的日志信息
2024-01-06 18:42:43,757 - [CRITICAL] - 1.py[28]:这是一个critical级别的日志信息
'''
5. 基本使用-使用过滤器过滤日志信息
  1. 创建方法:继承重写一下logging.Filter类的filter方法。
  2. 使用方法:处理器通过addFilter()方法绑定过滤器。
  3. 使用目的:一般情况都是按照日志级别进行过滤,目的在于对将不同级别的日志信息输出到不同的文件中,方便进行查看。
import logging

# 1. 创建过滤器
class LogFilter(logging.Filter):
    def __init__(self, name, low_level=10, high_level=50):
        super().__init__(name=name)
        self.low_level = low_level
        self.high_level = high_level

    def filter(self, record):
        return True if self.low_level <= record.levelno <= self.high_level else False


logger = logging.getLogger()

# 2. 设置日志最低级别。
logger.setLevel(logging.DEBUG)

# 3. 绑定终端处理器
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
# 绑定文件处理器
file_handler = logging.FileHandler(filename='./test.log', mode='a', encoding='utf8')
logger.addHandler(file_handler)

# 4. 创建格式器
fmt = logging.Formatter('%(asctime)s - [%(levelname)s] - %(filename)s[%(lineno)d]:%(message)s')
# 将格式器绑定到处理器上
stream_handler.setFormatter(fmt)
file_handler.setFormatter(fmt)

# 5. 创建过滤器
normal_filter = LogFilter('normal', logging.DEBUG, 20)
nonormal_filter = LogFilter('nonormal', logging.WARNING, logging.CRITICAL)

# 6. 终端处理器绑定正常过滤器
stream_handler.addFilter(normal_filter)

# 7. 文件处理器绑定非正常过滤器
file_handler.addFilter(nonormal_filter)

# 日志对象产生日志信息
logger.debug('这是一个debug级别的日志信息')
logger.info('这是一个info级别的日志信息')
logger.warning('这是一个warning级别的日志信息')
logger.error('这是一个error级别的日志信息')
logger.critical('这是一个critical级别的日志信息')


# 终端中打印以下信息:
'''
2024-01-06 20:40:14,689 - [DEBUG] - 1.py[46]:这是一个debug级别的日志信息
2024-01-06 20:40:14,689 - [INFO] - 1.py[47]:这是一个info级别的日志信息
'''

# 文件中打印以下信息
'''
2024-01-06 20:40:14,689 - [WARNING] - 1.py[48]:这是一个warning级别的日志信息
2024-01-06 20:40:14,689 - [ERROR] - 1.py[49]:这是一个error级别的日志信息
2024-01-06 20:40:14,689 - [CRITICAL] - 1.py[50]:这是一个critical级别的日志信息
'''
6. 进阶使用-日常工作中的日志模块设计

日常工作中日志模块设计思路:

  1. 使用时只需要配置日志文件存放地址就可以。
  2. 日志文件的存放时间间隔:每小时或者每天。
  3. 设置日志的输出级别。
  4. 在服务模块中,存放间隔、存放路径都可以放在配置文件中。
  5. 日志模块一般情况下放在工程中的util文件中。看自己习惯。

util/logger.py,设计如下,也可以按照自己的额外思路进行设计。文章来源地址https://www.toymoban.com/news/detail-822204.html

import logging
import time
import os

# 一个logging.Logger()对象
class Logging:
    def __init__(self):
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.INFO)

# 一个自定义过滤器
class Filter(logging.Filter):
    def __init__(self, name, low_level, high_level):
        super().__init__(name=name)
        self.low_level = low_level
        self.high_level = high_level

    def filter(self, record):
        return True if self.low_level <= record.levelno <= self.high_level else False

# 主函数,从logger.py文件汇总引人get_logger函数
def get_logger(log_root_path, low_level=logging.INFO, high_level=logging.CRITICAL):
    logger = Logging().logger
    log_file_name = f"{time.strftime('%Y%m%d-%H', time.localtime())}.log"
    handler = logging.FileHandler(filename=os.path.join(log_root_path, log_file_name),
                                  mode='a',
                                  encoding='utf-8')
    fmt = logging.Formatter('%(asctime)s - [%(levelname)s] - %(filename)s[%(lineno)d]:%(message)s')
    filter = Filter('dev', low_level, high_level)
    handler.setFormatter(fmt)
    handler.addFilter(filter)
    logger.addHandler(handler)
    return logger


if __name__ == "__main__":
    # 正常情况下只需要输入日志路径即可。
    logger = get_logger('./')
    logger.info('这是一个测试')

到了这里,关于python-日志模块以及实际使用设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python selenium驱动下载,模块安装以及基本使用

    视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 我们以谷歌浏览器为例讲解。首先我们要去下载谷歌浏览器驱动。 谷歌浏览器驱动下载地址:Chromium History Versions Download ↓ 查看谷歌浏览器版本 右上角三个点 - 帮助 - 关于 我们下载解压后的驱动,

    2024年02月06日
    浏览(55)
  • Python中的模块heapq以及使用方法详解

    1.1 nlargest(n, iterable, key=None) 函数 功能:获取可迭代对象iterable中n个最大的元素,返回这n个最大的元素列表(该列表从最大到小排列) 示例代码1: 示例代码2(参数key的用法): 1.2 nsmallest(n, iterable, key=None) 函数 功能:获取可迭代对象iterable中n个最小的元素,返回这n个最小的元素列

    2024年02月10日
    浏览(45)
  • 【八】mybatis 日志模块设计

    简介: 闲来无事阅读一下mybatis的日志模块设计,学习一下优秀开源框架的设计思路,提升自己的编码能力 在Mybatis内部定义了4个级别:Error:错误 、warn:警告、debug:调试、trance,日志优先级如下: errorwarndebugtrance 如下图可以看到mybatis日志模块的源码结构图:  mybatis通过适配

    2024年02月14日
    浏览(47)
  • Linux云服务器的使用,以及运行Python程序

    目录 1、使用Linux云服务器的软件 1.1、MobaXterm_Personal 1.2、WindTerm 1.3、FileZilla FTP 2、Linux系统运行Python程序 3、Linux系统查看包、虚拟环境、安装包等 以下几个深度学习服务器都不错:智星云、AutoDL、恒源云 1.1、 MobaXterm_Personal 推荐MobaXterm_Personal mobaxterm是一款方便网站管理员远

    2023年04月25日
    浏览(52)
  • Python使用HTTP代理实现网络请求的调试和日志记录

    在Python中,使用HTTP代理可以实现网络请求的调试和日志记录。通过HTTP代理,我们可以拦截、修改或记录网络请求和响应的数据,以便更好地了解和调试网络请求。 下面是一个使用Python和 httplib2 库实现HTTP代理的示例,同时对请求和响应进行调试和日志记录: python 复制代码

    2024年01月19日
    浏览(64)
  • Python-日志模块笔记

    在Python中, logging 模块提供了强大的日志记录功能,用于记录和输出程序运行时的各种消息和状态信息。通过使用 logging 模块,您可以控制日志的级别、格式和输出位置,以便更好地了解和调试程序的行为。 日志:记录软件运行发生的事件 程序测试、排错、用户的行为分析

    2024年02月11日
    浏览(28)
  • 日志模块python loguru

    Loguru 的主要概念是只有一个:logger 可以看到不需要手动设置,Loguru 会提前配置一些基础信息,自动输出时间、日志级别、模块名、行号等信息,而且根据等级的不同,还自动设置了不同的颜色,方便观察,真正做到了开箱即用! 与 logging 模块不同,不需要 Handler,不需要

    2024年02月05日
    浏览(36)
  • python的日志模块学习记录

    1.导入 2.配置日志配置项(基本配置一般不能满足需要,一般使用字典配置如下) 此基础配置的日志打印格式示例 3.调用配置,是日志配置生效 4.打印日志

    2024年02月06日
    浏览(44)
  • Nodejs中http 模块介绍以及服务器相关的概念

    什么是客户端、什么是服务器? 在网络节点中,负责消费资源的电脑,叫做 客户端 负责对外提供网络资源的电脑,叫做 服务器 http 模块是 Node.is 官方提供的、用来创建 web 服务器的模块,通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 W

    2024年03月23日
    浏览(48)
  • Python 程序设计入门(025)—— 使用 os 模块操作文件与目录

    Python 内置了 os 模块及其子模块 os.path,用于对目录或文件进行操作。在使用 os 模块及其子模块 os.path 模块时,需要使用 import 导入该模块,才能使用它们提供的函数或方法。 1、os 模块提供的操作目录的函数 os 模块提供的操作目录的函数如下表所示: 函数 说明 getcwd() 返回当

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包