Python【进阶】logging模块

一. logging 模块简介

1.logging 模块是 Python 自带的标准模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,

日志级别(从低到高) 对应数值 对应函数 使用场景描述
DEBUG 10 logging.debug() 最低级别,常用于调试,查看详细信息,诊断问题才会使用
INFO 20 logging.info() 用于记录程序中正常运行的一些信息,可以理解为print的使用
WARNING 30 logging.warning() 警告用户虽然程序还在正常运行,但可能会发生错误
ERROR 40 logging.error() 程序出现错误,程序中的某些功能已经不能够执行
CRITICAL 50 logging.critical() 程序出现严重错误,程序已经不能继续运行

对应的5中打印日志的方法分别是:debug、info、warning、error、critical,默认是WARNING,当在WARNING或之上时才被跟踪!

2. logging 模块有什么作用

  • 主要用于输出运行日志
  • 可以控制输出日志的等级, 过滤一些重要信息, 不显示大量无关要紧的调试信息
  • 日志保存的路径, 可以是输出到终端, 也可以是输出到文件
  • 以及文件轮转等等, 日志文件轮转指的是设置保存日志文件个数, 当超过最大日志文件个数, 最早的那个日志文件会被删除

二. logging 简单示例

1、在什么都不配置和设定的情况下,logging会简单的将日志在终端打印出来,如下例所示:

import logging

logging.debug('Debug code!')
logging.info('Run code!')
logging.warning('Watch out!')  # 
logging.error('This is an error')
logging.critical('This is a ciritical')
```输出信息
WARNING:root:Watch out!
ERROR:root:This is an error
CRITICAL:root:This is a ciritical```

三. logging.basicConfig()

1、logging.basicConfig()的参数除了设置日志等级,还有很多其他参数设置!
logging.basicConfig()的参数:

参数名称 参数作用说明
filename 指定保存日志的文件名,用指定文件名创建一个FileHandler,而不是StreamHandler
filemode 如果指定了文件名,则用该模式打开文件,默认是'a'模式
format 指定出输出的格式和内容,默认是以冒号分割的levalname、name 和 message
datefmt 使用指定的日期/时间格式,与 time.strftime() 所接受的格式相同。
style 如果指定了format,则格式字符串的时候使用此风格,%、{、$分别对应于printf风格、str.format()、string.Template。默认风格为%
level 指定根日志记录器级别,默认为logging.WARNING
stream 指定日志的输出流,可以指定输出到sys.stderr,std.stdout 或 文件,默认输出到sys.stderr。使用指定的流初始化StramHandler,注意:stream和filename参数不兼容,如果两者同时使用,则会引发ValueError错误
handlers 如果指定,这应为一个包含要加入根日志记录器的已创建处理器的可迭代对象。 任何尚未设置格式描述符的处理器将被设置为在此函数中创建的默认格式描述符。 请注意此参数与 filename 或 stream 不兼容 —— 如果两者同时存在,则会引发 ValueError。
force 如果将此关键字参数指定为 true,则在执行其他参数指定的配置之前,将移除并关闭附加到根记录器的所有现有处理器。
encoding 如果此关键字参数与 filename 一同被指定,则其值会在创建 FileHandler 时被使用,因而也会在打开输出文件时被使用。
errors 如果此关键字参数与 filename 一同被指定,则其值会在创建 FileHandler 时被使用,因而也会在打开输出文件时被使用。 如果未指定,则会使用值 ‘backslashreplace’。 请注意如果指定为 None,它将被原样传给 open(),这意味着它将会当作传入 ‘errors’ 一样处理。
posted @ 2022-06-10 20:27  小涛lct  阅读(158)  评论(0编辑  收藏  举报