您的位置:首页 > 编程语言 > Python开发

『无为则无心』Python日志 — 65、日志模块logging的使用

2022-03-04 17:05 766 查看

[toc]

1、logger类用法

logger
类:
logger
用于提供日志接口,常用于配置和发送日志消息。

我们一般使用

logging.getLogger(name)
方法来获得一个
logger
对象。

其中,可选参数

name
指定日志器名称,默认为“root”。

常用方法包括:

  • logger.setLevel()
    :设置日志器处理日志信息的最低级别。
  • logger.addHandler()
    :为该
    logger
    对象添加一个
    handler
    对象。
  • logger.removeHandler()
    :为该
    logger
    对象添加移除一个
    handler
    对象。
  • logger.addFilter()
    :为该
    logger
    对象添加一个
    filter
    对象。
  • logger.removeFilter()
    :为该
    logger
    对象移除一个
    filter
    对象。
  • 创建一个对应等级的日志记录:
    logger.debug()
    logger.info()
    logger.warning()
    logger.error()
    logger.critical()
  • logger.log()
    :获取一个日志
    level
    参数,来创建一个日志记录。

示例:

"""
logging模块是Python的内置模块,不需要安装。
"""
# 导入logging模块
import logging

# 创建一个日志器,就是一个logger对象
logger = logging.getLogger('logger')

# 输出日志信息
logger.debug('输出debug级别的日志')
logger.info('输出info级别的日志')
logger.warning('输出warning级别的日志')
logger.error('输出error级别的日志')
logger.critical('输出critical级别的日志')

"""
# 右键执行代码
# 结果如下:
输出warning级别的日志
输出error级别的日志
输出critical级别的日志
"""

总结:

默认情况下Python的

logging
模块将日志打印到了标准输出中(控制台),且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING。

2、handler类用法

handler
类:
handler
对象用于将指定的日志信息发送到指定的位置。

一个

logger
对象可以添加多个
handler
,每个
handler
又可以定义不同日志级别,以实现日志分级过滤显示。

也就是说通过

handler
我们可以将日志同时输出到多个位置。

常用的方法包括:

  • handler.setLevel()
    :设置
    handler
    处理的日志信息最低级别。
  • handler.setFormatter()
    :为
    handler
    设置一个格式器对象。
  • handler.addFilter()
    :为
    handler
    添加一个过滤器对象。
  • handler.removeFilter()
    :为
    handler
    删除一个过滤器对象。
  • logging.StreamHandler()
    :将日志信息发送到
    Stream
  • logging.FileHandler()
    :将日志消息发送到磁盘文件。

示例:把上面的示例,实现DEBUG级别日志的输出。

"""
logging模块是Python的内置模块,不需要安装。
"""
# 导入logging模块
import logging

# 创建一个日志器,就是一个logger对象
logger = logging.getLogger('logger')

# 1.设置logger日志级别
logger.setLevel(logging.DEBUG)

# 2.创建一个输出的处理器,让它输入到控制台
sh = logging.StreamHandler()

# 3.把输出处理器添加到日志器中
logger.addHandler(sh)

# 输出日志信息
logger.debug('输出debug级别的日志')
logger.info('输出info级别的日志')
logger.warning('输出warning级别的日志')
logger.error('输出error级别的日志')
logger.critical('输出critical级别的日志')

"""
# 右键执行代码
# 结果如下:
输出debug级别的日志
输出info级别的日志
输出warning级别的日志
输出error级别的日志
输出critical级别的日志
"""

说明:

当我们设置好

logger
日志级别后,执行代码,发现还是和上面一样,只输出了
warning
级别日志。

这个时候我们是改变了

logger
默认设置,就需要创建一个日志处理器
Handler
,来处理输出这个自定义
logger
对象的日志输出。

3、formatter类用法

formatter
类:
formatter
对象用来输出格式化字符串,也叫做格式器。

构造方法如下:

logging.Formatter.__init__(fmt=None, datefmt=None)

其中:

fmt
:指定信息(日志)的格式化字符串,如不设定则使用信息的原始字符串。

datefmt
:指定日期的格式化字符串,如不设定则使用默认格式
"%Y-%m-%d %H:%M:%S"

logging
模块中定义好的可以用于
format
格式字符串说明:

字段/属性名称 使用格式 描述
asctime
%(asctime)s
将日志的时间构造成可读的形式,默认情况下是
‘2016-02-08 12:00:00,123’
精确到毫秒。
name
%(name)s
所使用的日志器名称,默认是
root
,因为默认使用的是
rootLogger
filename
%(filename)s
调用日志输出函数的模块的文件名;
pathname
的文件名部分,包含文件后缀。
funcName
%(funcName)s
由哪个
function
发出的
log
, 调用日志输出函数的函数名。
levelname
%(levelname)s
日志的最终等级(被
filter
修改后的)。
message
%(message)s
日志信息, 日志记录的文本内容。
lineno
%(lineno)d
当前日志的行号, 调用日志输出函数的语句所在的代码行。
levelno
%(levelno)s
该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)。
pathname
%(pathname)s
完整路径 ,调用日志输出函数的模块的完整路径名,可能没有。
process
%(process)s
当前进程, 进程ID。可能没有。
processName
%(processName)s
进程名称,Python 3.1新增。
thread
%(thread)s
当前线程, 线程ID。可能没有。
threadName
%(thread)s
线程名称。
module
%(module)s
调用日志输出函数的模块名,
filename
的名称部分,不包含后缀即不包含文件后缀的文件名。
created
%(created)f
当前时间,用UNIX标准的表示时间的浮点数表示; 日志事件发生的时间--时间戳,就是当时调用
time.time()
函数返回的值。
relativeCreated
%(relativeCreated)d
输出日志信息时的,自
Logger
创建以 来的毫秒数; 日志事件发生的时间相对于
logging
模块加载时间的相对毫秒数。
msecs
%(msecs)d
日志事件发生事件的毫秒部分。
logging.basicConfig()
中用了参数
datefmt
,将会去掉
asctime
中产生的毫秒部分,可以用这个加上。

示例:

"""
logging模块是Python的内置模块,不需要安装。

步骤:
1,定义格式器
2,把格式器输入处理器中
"""
# 导入logging模块
import logging

# 创建一个日志器,就是一个logger对象
logger = logging.getLogger('logger')

# 设置logger输入级别
logger.setLevel(logging.DEBUG)

# 1.创建日志格式器
formator = logging.Formatter(fmt="%(asctime)s [ %(filename)s ]  %(lineno)d行 | [ %(levelname)s ] | [%(message)s]",
datefmt="%Y/%m/%d/%X")

# 创建一个输出的处理器,让它输入到控制台
sh = logging.StreamHandler()

# 把输出处理器添加到日志器中
logger.addHandler(sh)

# 2.给处理器添加格式器
sh.setFormatter(formator)

# 输出日志信息
logger.debug('输出debug级别的日志')
logger.info('输出info级别的日志')
logger.warning('输出warning级别的日志')
logger.error('输出error级别的日志')
logger.critical('输出critical级别的日志')

"""
# 右键执行代码
# 结果如下:
2021/01/15/03:15:44 [ demo_log2.py ]  27行 | [ DEBUG ] | [输出debug级别的日志]
2021/01/15/03:15:44 [ demo_log2.py ]  28行 | [ INFO ] | [输出info级别的日志]
2021/01/15/03:15:44 [ demo_log2.py ]  29行 | [ WARNING ] | [输出warning级别的日志]
2021/01/15/03:15:44 [ demo_log2.py ]  30行 | [ ERROR ] | [输出error级别的日志]
2021/01/15/03:15:44 [ demo_log2.py ]  31行 | [ CRITICAL ] | [输出critical级别的日志]
"""

4、filter类用法

filter类
filter
是一个过滤器,可以实现比
logger
handle
更细致灵活的过滤功能。

设置只输出符合过滤条件的日志记录,提供给

Logger
类和
Handler
类使用。

Logger
类默认过滤具有相同前缀的所有日志记录。

Logger
只有在处理日志记录时即时检查
Filter
,所以继承
Logger
不会检查
Filter

Handler
首先注册
Filter
,然后在处理后续日志记录时检查。

首先定义

logging.Filter
的扩展类,并在其中实现
def filter(self, record)
方法。然后创建定制
Filter
类的实例,并通过
addFilter()
方法附加到
Logger
Handler

参考:https://www.sohu.com/a/280170254_697896

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: