首页 > 编程语言 >Python logging模块怎么使用,你会了吗?

Python logging模块怎么使用,你会了吗?

时间:2023-08-06 18:01:20浏览次数:42  
标签:logging Python message handler 模块 debug 日志 logger

Python logging模块怎么使用,你会了吗?_日志记录

Python logging模块使用

在开发和维护Python应用程序时,日志记录是一项非常重要的任务。Python提供了内置的logging模块,它可以帮助我们方便地记录应用程序的运行时信息、错误和调试信息。本文将介绍如何使用Python logging模块进行日志记录。

logging模块

logging是Python自带的用于记录程序运行日志的模块,它将日志分为5个等级,分别是:

  • DEBUG
  • INFO
  • WARNING
  • ERROR
  • CRITICAL

同时也可以将日志输出到控制台或者写入到日志文件中。

logging中的常用对象

  • Logger:日志记录器,是应用程序中可以直接使用的接口。
  • Handler:日志处理器,用以表明将日志保存到什么地方以及保存多久。
  • Formatter:格式化,用以配置日志的输出格式。

三者关系为,一个 Logger 使用一个 Handler,一个 Handler 使用一个 Formatter

日志输出到控制台

import logging

# 创建logger实例
logger = logging.getLogger('example')

# 设置日志级别
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实例中
logger.addHandler(console_handler)

# 记录日志信息
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')

运行代码,控制台输出如下:

2023-06-29 11:04:29,242 - example - DEBUG - debug
2023-06-29 11:04:29,242 - example - INFO - info
2023-06-29 11:04:29,242 - example - WARNING - warning
2023-06-29 11:04:29,242 - example - ERROR - error
2023-06-29 11:04:29,242 - example - CRITICAL - critical

日志输出到文件

更多时候,我们需要将日志保存起来,所以我们可以指定将日志输出到日志文件中,代码如下:

import logging

filename = "{}.log".format(__file__)
fmt = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"

logging.basicConfig(
    level=logging.DEBUG,
    filename=filename,
    filemode="w",
    format=fmt
)

logging.info("info")
logging.debug("debug")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

日志文件内容如下图:

Python logging模块怎么使用,你会了吗?_日志文件_02

同时输出到文件和控制台

import logging

# 创建logger对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)  # log等级总开关

# log输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

# 控制台handler
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO) # log等级的开关
stream_handler.setFormatter(formatter)

# 文件handler
file_handler = logging.FileHandler("logging.log")
file_handler.setLevel(logging.WARNING) # log等级的开关
file_handler.setFormatter(formatter)

# 添加到logger
logger.addHandler(stream_handler)
logger.addHandler(file_handler)

# 输出日志
logger.info("info")
logger.debug("debug")
logger.warning("warning")
logger.error("error")
logger.critical("critical")

logging.conf配置文件

我们可以通过logging.conf来配置日志的输出,logging.conf名称是固定的。

[loggers]
keys = root

[handlers]
keys = logfile

[formatters]
keys = generic

[logger_root]
handlers = logfile

[handler_logfile]
class = handlers.TimedRotatingFileHandler
args = ('demo.log', 'midnight', 1, 10)
level = DEBUG
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-3.5s [%(name)s:%(lineno)s] %(message)s
import logging.config

logging.config.fileConfig('logging.conf')

logging.debug('debug message')
logging.info("info message")
logging.warning('warning message')
logging.error("error message")
logging.critical('critical message')

运行结果如下:

Python logging模块怎么使用,你会了吗?_Python_03

循环覆盖式日志处理

随着程序逐渐运行,日志规模会越来越大,我们就需要删除掉之前的日志,也可以设置单个日志的大小,当日志大小达到限定值时,会自动开始写入新的日志文件。

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger("root")
# 设置logger等级
logger.setLevel(logging.DEBUG)

# 设置日志格式
formatter = logging.Formatter(
    fmt='%(asctime)s - %(pathname)s - %(name)s - %(levelname)s: - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S')

# 设置日志回滚  # 单个日志文件最大为1k,
# 最多保存4份日志文件(除了当前写入的文件外)
# 日志文件编码格式为utf-8
handler = RotatingFileHandler("logging.log", maxBytes=1024 * 1, backupCount=4, encoding='utf-8')
handler.setFormatter(formatter)

# 给logger添加handler
logger.addHandler(handler)

# 测试主模块
for i in range(100):
    logger.debug("测试日志main %d", i)

总结

通过使用Python的logging模块,我们可以方便地进行日志记录并获得应用程序的运行时信息。我们可以设置不同的日志级别,根据需要记录调试信息、警告、错误等。此外,我们还可以将日志记录到文件中,以供后续查看和分析。

使用logging模块进行日志记录可以帮助我们更好地理解应用程序的运行状况,并帮助我们快速定位和解决问题。建议在开发和维护Python应用程序时,充分利用logging模块进行日志记录。

标签:logging,Python,message,handler,模块,debug,日志,logger
From: https://blog.51cto.com/u_15640304/6985854

相关文章

  • 软件测试|Python科学计算神器numpy教程(二)
    前言上一篇文章我们介绍了numpy的安装和ndarray的部分知识,本篇文章我们来介绍一下numpy的数组的常用属性以及创建数组相关内容。数组常用属性ndarray.shapeshape属性的返回值一个由数组维度构成的元组,比如2行3列的二维数组可以表示为(2,3),该属性可以用来调整数组维度的......
  • 开源进销存系统应该具备哪些功能模块?
    进销存管理是企业管理中的关键环节之一,对于企业的运营和发展具有重要意义。一款优秀的进销存管理软件应该具备以下功能,才能满足企业的需求,提高管理效率,助力企业快速发展。销售管理销售管理是进销存管理软件的核心功能之一,它应该具备销售订单、销售单、退货单管理、客户管理、价格等......
  • 【springBoot】搭建多模块项目指南
    二、多环境配置内容①在reources目录下建立多个配置文件②在pom.xml配置profile节点③mvn命令行打包命令,基于参数进行打包替换占位符mvn-Ucleaninstall-Dmaven.test.skip=true-Pprod④将target目录下的jar包copy出来,执行命令启动,使用的就是不同环境的配置进行启动的......
  • 数据量较大时,python 如何加速 matplotlib 的作图
    数据量较大时,python如何加速matplotlib的作图?GeneratedbyChatGPT当数据量较大时,matplotlib可能会变得缓慢。下面是一些可以加速matplotlib作图的方法:使用blitting:blitting是一种将图形上下文缓存到位图中的技术,可以提高图形更新的速度。使用数据抽样:通过对数据进行抽......
  • python基础入门模块
    一、os模块os模块提供了许多与操作系统相关的函数,可以让我们在Python程序中轻松地处理文件和目录、环境变量等等。下面是os模块中常用的方法:os.getcwd()这个函数用于获取当前工作目录,即当前Python脚本工作的目录路径。os.chdir(path)这个函数用于改变当前工作目录到指定的......
  • Python 中整型对象存储的位置
    在Python整型对象所存储的位置是不同的,有一些是预先分配内存的,它一直存储在内存里面,而其它的,则在使用时开辟出空间.说这句话的理由,可以看看如下代码:123456a = 5b = 5a is b # Truea = 500b = 500a is b # False由上面的代码可知,整型5是一直存在的,......
  • python配置
    python配置pip设置全局清华源pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simplejupyter安装pipinstalljupyterlabjupyter内核配置pipinstallipykernelpython-mipykernelinstall--user--name=yolov8jupyterkernelspeclistjupyter......
  • 流畅的python笔记 (一) 1.python的数据模型
    python的数据模型:python风格的设计思想完全体现在Python的数据模型上,而数据模型所描述的API,为使用最地道的语言特性来构建你自己的对象提供了工具。数据模型其实是对Python框架的描述,它规范了这门语言自身构建模块的接口,这些模块包括但不限于序列、迭代器、函数、类和上下文管理......
  • 笔记|《Python数据分析基础》
    python基础StrategyforFindingaRegexWeneedastrategytofindaregexthatmatchesallthewinnersbutnoneofthelosers.Icameupwiththisapproach:Generateapoolofregexparts:smallregexesofafewcharacters,suchasoror."bu"&......
  • 使用Python爬取公众号的合集内容
    使用Python爬取公众号的合集前言。。。最近老是更新关于博客的文章,很久没更新其他的了,然后写一下如何爬取微信公众号里面的图片吧!先看看微信公众号的样子吧:我爬取的是公众号的合集内容讲解首先用手机打开某个图片公众号的文章,然后复制链接用电脑打开,它的url为:以下所展示的......