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是一个过滤器,可以实现比loggerhandle更细致灵活的过滤功能。

设置只输出符合过滤条件的日志记录,提供给Logger类和Handler类使用。

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

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

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

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

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

『无为则无心』Python日志 — 65、日志模块logging的使用的更多相关文章

  1. 『无为则无心』Python日志 — 64、Python日志模块logging介绍

    目录 1.日志的作用 2.为什么需要写日志 3.Python中的日志处理 (1)logging模块介绍 (2)logging模块的四大组件 (3)logging日志级别 1.日志的作用 从事与软件相关 ...

  2. 『无为则无心』Python日志 — 66、将日志信息保存到文件中

    目录 1.把日志信息保存到文件中 2.拓展 (1)观察代码 (2)提出问题 (3)问题说明 1.把日志信息保存到文件中 代码如下所示: """ logging模块是Pyt ...

  3. 『无为则无心』Python日志 — 67、logging日志模块处理流程

    目录 1.概括理解 2.详细说明 3.应用示例 1.概括理解 了解了四大组件的基本定义之后,我们通过图示的方式来理解下信息的传递过程: 也就是获取的日志信息,进入到Logger日志器中,传递给处理器确 ...

  4. 『无为则无心』Python基础 — 44、对文件和文件夹的操作

    目录 1.os模块介绍 2.查看os模块相关文档 3.os模块常用方法 (1)文件重命名 (2)删除文件 (3)创建文件夹 (4)删除文件夹 (5)获取当前目录 (6)改变默认目录 (7)获取目录列表 ...

  5. 『无为则无心』Python日志 — 69、补充:logging.basicConfig()函数说明

    目录 1.basicConfig()函数说明 2.应用 1.basicConfig()函数说明 此函数,通过创建一个带有默认Formatter(格式器)的StreamHandler(处理器),并将其添 ...

  6. 『无为则无心』Python基础 — 9、Python字符串的编码与转义

    目录 1.查看变量类型 2.转义字符 (1)转义字符说明 (2)示例 (3)常用转义字符对照表 3.字符编码 (1)字符编码介绍 (2)Python中的字符编码 (3)编码格式应用于不同场景 提示:上 ...

  7. 『无为则无心』Python基础 — 2、编译型语言和解释型语言的区别

    目录 1.什么是计算机语言 2.高级语言中的编译型语言和解释型语言 (1)编译型语言 (2)解释型语言 (3)编译型语言和解释型语言执行流程 3.知识扩展: 4.关于Python 1.什么是计算机语言 ...

  8. 『无为则无心』Python基础 — 3、搭建Python开发环境

    目录 1.Python开发环境介绍 2.Python解释器的分类 3.下载Python解释器 4.安装Python解释器 5.Python解释器验证 1.Python开发环境介绍 所谓"工欲 ...

  9. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

随机推荐

  1. golang操作mysql

    1. 安装mysql驱动库和sqlx基于官方sql库的扩展库 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx ...

  2. vue 快速入门 系列 —— 实例方法(或 property)和静态方法

    其他章节请看: vue 快速入门 系列 实例方法(或 property)和静态方法 在 Vue(自身) 项目结构 一文中,我们研究了 vue 项目自身构建过程,也知晓了 import Vue from ...

  3. Python 修改AD密码

    前提条件: AD 已开启证书服务(最重要的一句话). import ldap3 SERVER = 'adserver' BASEDN = "DC=example,DC=com" U ...

  4. 学习JAVAWEB第十三天

    会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. 方式: ...

  5. 学习Java第6天

    今天所做的工作: 1.完成学生信息管理系统样卷 2.核心技术接口继承,多态 明天工作安排: 1.类的高级特性(Java类包) 2.异常处理 今天做一个小小的总结,Java程序是完全面向对象的,它的所有 ...

  6. 关于笨蛋式病毒创作(CMD式)C++

    ​ 对于病毒创作,有好多种原因:有想装逼的,想盗取信息的...... 任何理由千奇百出,有的在下面评论出来. 对于病毒创作,我可是既会有不会,只会乱写,回头一看,全错了. 我今天写的这篇博客就是面向于 ...

  7. Flink源码学习笔记(3)了解Flink HA功能的实现

    使用Flink HA功能维护JobManager中组件的生命周期,可以有效的避免因为JobManager 进程失败导致任务无法恢复的情况. 接下来分享下 Flink HA功能的实现 大纲 基于Zook ...

  8. AWS 模拟题知识点总结!

    一 题库的地址 https://www.lleicloud.com/index.php/aws-certified-saa-c01-practice-questions-c6-01/ 二 总结的知识点 ...

  9. List去重复

    HashSet hs = new HashSet(li1); //此时已经去掉重复的数据保存在hashset中 HashSet不能给cbx.datasource赋值,要转成list再赋值 List t ...

  10. bom-倒计时

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...