Python中logging模块的基本用法_python logging debug
off999 2025-09-12 01:26 38 浏览 0 评论
在开发项目时,我们不可能将所有的信息都打印在控制台中。我们可以使用Python标准库提供的logging API来处理。相比print,logging模块提供了许多强大而灵活的功能。
比如:可以通过设置不同的日志等级,只输出重要信息,而不必显示大量的调式信息;print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据,而logging则可以由开发者决定将信息输出到什么地方,以及怎么输出。
1. logging模块基本信息
1.1 日志等级
logging函数默认定义了5个日志等级,它允许开发人员自定义日志等级,但是并不推荐。
注:日志等级从上到下依次升高 DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志信息依次减少;当指定一个日志级别之后,会记录大于或等于这个日志级别的日志信息,小于的将会被丢弃;默认打印的日志等级是 WARNING ,当日志等级设置为 WARNING 或之上时才被跟踪。
1.2 日志字段信与格式
一条日志信息对应的是一个事件的发生,而一个事件通常需要包括以下几个内容:
- 事件发生时间
- 事件发生位置
- 事件的严重程度
- 日志级别、事件内容等其他内容
注:输出一条日志时,日志内容和日志级别是需要开发人员明确指定的;对于而其它字段信息,只需要是否显示在日志中就可以了。
2. logging模块的使用方式
2.1 两种记录日志方式
(1)使用logging提供的模块级别函数
(2)使用logging日志系统的四大组件
2.2 使用logging提供的模块级别函数详细说明
(1)函数描述:
注:其中logging.basicConfig(**kwargs)函数用于指定“要记录的日志级别”、“日志格式”、 “日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。
(2)实例:
import logging
def ex_logging():
logging.debug("日志级别:DEBUG")
logging.info("日志级别:INFO")
logging.warning("日志级别:WARNING")
logging.error("日志级别:ERROR")
logging.critical("日志级别:CRITICAL")
ex_logging()(3)实际结果:
WARNING:root:日志级别:WARNING
ERROR:root:日志级别:ERROR
CRITICAL:root:日志级别:CRITICAL注:默认打印的日志等级是 WARNING ,所以实际结果中只打印出了WARNING 或WARNING级别之上的日志。
2.3 使用logging日志系统的四大组件
组件描述:
2.4 日志器 - Logger
(1)Logger是一个树形层级结构,在使用接口debug、info、warning、error、critical之前必须创建Logger实例;
(2)创建方式:
logger = logging.getLogger(logger_name)(3)创建Logger实例后,可以使用以下方法进行日志级别设置,增加处理器Handler:
logger.setLevel(logging.ERROR) # 设置日志级别为 ERROR,即只有日志级别大于等于 ERROR 的日志才会输出
logger.addHandler(handler_name) # 为Logger实例增加一个处理器
logger.removeHandler(handler_name) # 为 Logger 实例删除一个处理器2.5 处理器 - Handler
(1)Handler 处理器类型有很多种,比较常用的有三个:StreamHandler、FileHandler、NullHandler。
(2)创建方式:
# StreamHandler创建方式
sh = logging.StreamHandler(stream=None)
# FileHandler创建方式
# fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)
# NullHandler:NullHandler类位于核心logging包,不做任何的格式化或者输出。本质上它是个“什么都不做”的handler,由库开发者使用。 (3)创建 StreamHandler 之后,可以通过使用以下方法设置日志级别,设置格式化器 Formatter,增加或删除过滤器 Filter。
ch.setLevel(logging.WARN) # 指定日志级别,低于WARN级别的日志将被忽略
ch.setFormatter(formatter_name) # 设置一个格式化器formatter
ch.addFilter(filter_name) # 增加一个过滤器,可以增加多个
ch.removeFilter(filter_name) # 删除一个过滤器2.6 过滤器 - filters
(1)Filter过滤器基类,它只允许某个logger层级下的日志事件通过过滤。
(2)一条日志信息被输出要经过以下几次过滤:日志器等级过滤、日志器的过滤器过滤、日志器的处理器等级过滤、日志器的处理器的过滤器过滤。
(3)创建方式:
filter = logging.Filter(name='')2.7 格式化器 - Formatter
(1)使用Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。
(2)创建方法:
formatter = logging.Formatter(fmt=None, datefmt=None)
# fmt是消息的格式化字符串,datefmt是日期字符串。如果不指明fmt,将使用'%(message)s'。如果不指明datefmt,将使用ISO8601日期格式。2.8 组件之间的关系
(1)日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,不同的处理器(handler)可以将日志输出到不同的位置。
(2)日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置。
(3)每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志。
(4)每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。
总结以上内容:Logger 可以包含一个或多个 Handler 和 Filter,即:LoggerFilter,即:Logger 与 Handler 或 Fitler 是一对多的关系;一个 Logger 实例可以新增多个 Handler,一个 Handler 可以新增多个格式化器或多个过滤器,而且日志级别将会继承。
3. 代码的实现与具体应用
可以通过以下3种方法来配置logging:使用python代码创建loggers,handlers和formatters并分别调用它们的配置函数,创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容,创建一个包含配置信息的dict,然后把它传递给dictConfig()函数;
3.1 使用python代码实现日志配置
(1)Python代码展示:
import logging
import sys
# 创建日志器logger并将其日志级别设置为DEBUG
logger = logging.getLogger("python_config_logger")
logger.setLevel(logging.DEBUG)
# 创建一个流处理器handler并将其日志级别设置为DEBUG
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
# 创建一个格式化器formatter并将其添加到处理器handler中
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
# 为日志器logger添加上面创建好的处理器handler
logger.addHandler(handler)
# 将日志打印在控制台
logger.debug('打印日志级别:debug')
logger.info('打印日志级别:info')
logger.warning('打印日志级别:warning')
logger.error('打印日志级别:error')
logger.critical('打印日志级别:critical') (2)实际结果:
2021-02-24 17:13:44,644 - python_config_logger - DEBUG - 打印日志级别:debug
2021-02-24 17:13:44,644 - python_config_logger - INFO - 打印日志级别:info
2021-02-24 17:13:44,644 - python_config_logger - WARNING - 打印日志级别:warning
2021-02-24 17:13:44,645 - python_config_logger - ERROR - 打印日志级别:error
2021-02-24 17:13:44,645 - python_config_logger - CRITICAL - 打印日志级别:critical3.2 使用配置文件和fileConfig()函数实现日志配置
(1)Python代码展示:
import logging.config
# 读取日志配置文件内容
logging.config.fileConfig('logging.conf')
# 创建一个日志器logger
logger = logging.getLogger('simpleExample')
# 将日志打印在控制台
logger.debug('打印日志级别:debug')
logger.info('打印日志级别:info')
logger.warning('打印日志级别:warning')
logger.error('打印日志级别:error')
logger.critical('打印日志级别:critical')(2)logging.conf配置文件内容:
[loggers]
keys=root,simpleExample
# 测试
[handlers]
keys=fileHandler,consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=fileHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
[handler_fileHandler]
class=FileHandler
args=('logging.log', 'a')
level=ERROR
formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=(3)实际结果:
2021-02-25 15:04:50,644 - simpleExample - DEBUG - 打印日志级别:debug
2021-02-25 15:04:50,646 - simpleExample - INFO - 打印日志级别:info
2021-02-25 15:04:50,646 - simpleExample - WARNING - 打印日志级别:warning
2021-02-25 15:04:50,646 - simpleExample - ERROR - 打印日志级别:error
2021-02-25 15:04:50,646 - simpleExample - CRITICAL - 打印日志级别:critical3.3 使用dict配置信息和dictConfig()函数实现日志配置
(1)Python代码展示:
import logging.config
import logging
import yaml
# 读取日志配置文件内容
with open('logging.yml', 'r') as file_logging:
dict_conf = yaml.load(file_logging, Loader=yaml.FullLoader)
logging.config.dictConfig(dict_conf)
# 创建一个日志器logger
logger = logging.getLogger('simpleExample')
# 将日志打印在控制台
logger.debug('打印日志级别:debug')
logger.info('打印日志级别:info')
logger.warning('打印日志级别:warning')
logger.error('打印日志级别:error')
logger.critical('打印日志级别:critical') (2)logging.yml配置文件内容:
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
loggers:
simpleExample:
level: DEBUG
handlers: [console]
propagate: no
root:
level: DEBUG
handlers: [console](3)实际结果:
2021-02-25 15:14:28,822 - simpleExample - DEBUG - 打印日志级别:debug
2021-02-25 15:14:28,822 - simpleExample - INFO - 打印日志级别:info
2021-02-25 15:14:28,822 - simpleExample - WARNING - 打印日志级别:warning
2021-02-25 15:14:28,822 - simpleExample - ERROR - 打印日志级别:error
2021-02-25 15:14:28,823 - simpleExample - CRITICAL - 打印日志级别:critical4. 总结
本文只是简单的介绍了python中logging模块的基本使用方法,后期还有许多优化的地方,希望和大家一起来探讨。
我们是行者AI,我们在“AI+游戏”中不断前行。
快来【公众号 | xingzhe_ai】,和我们讨论更多技术问题吧!
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
