首页 > 编程语言 >python内置库--logging

python内置库--logging

时间:2023-05-31 22:55:05浏览次数:56  
标签:logging python -- handler 记录器 日志 级别 logger

关于logging

利用logging,我们在代码里面输出日志信息,这些日志信息可以包括代码中的数据、日志所在模块/文件/行、记录时间、日志级别等等,这些信息可以判断代码运行状态、查看具体代码信息以帮助我们定位问题。

在代码量大、模块多时,建议用logging来替代print,输出信息更加方便阅读和检索

下面是一个简单的例子
image

执行后 输入0
image

执行后 输入4
image

logging的简单使用

日志的级别

日志数据有不同的level or severity(级别或严重性),如下官方图介绍,级别从上到下依次递增
image
日志的默认级别被设定为WARNING,logging会按照设定的级别记录该级别或者之上级别的日志信息。默认级别是可以修改的

在之前的例子中看到,logging.info()中的数据就没有被记录,info(xx)表明该条日志数据是INFO级别。这里要注意下大小写,不要搞错了

修改日志级别

image
如上,在basicConfig()方法中设定级别

修改日志的显示格式

前面如 INFO:root:this is info ms,这条数据中包含了日志级别、记录器名称、具体数据三个元素,其实我们同样可以在basicConfig()方法中的format配置要显示哪些数据

image

如上,format中用%(xxx)s的形式来配置要显示的元素,元素间的如何连接可自定义,可用的xxx如下面官网介绍图

image
image

其中asctime字段显示的的日期和时间格式也可以通过datefmt字段自定义如

import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')

输出内容如下

12/12/2010 11:46:36 AM is when this event was logged

输出日志到文件

image
如上,同样是在basicConfig()配置,还可以配置encoding和处理错误编码的errors参数。
执行后,在执行目录下面会生成对应的log文件

logging模块的进一步介绍

总的来说,logging提供以下类供我们使用
Logger, Handler, Filter, and Formatter
Logger:生成记录器logger的类
Handler: 生成处理器handler的类
Filter:生成过滤器filter的类
Formatter: 生成格式奇formatter的类

记录器

logger = logging.getLogger(__name__)

如上,获得了一个记录器logger,名称可以自己随便取,不过官方推荐是像上面样使用模块名。
我们要输出日志,首先都必须要创建一个记录器,前面我们没有创建,直接使用logging.xx()来输出日志,系统就会帮我们创建一个叫root的记录器

根记录器root有以下函数来输出日志消息
debug() 、 info() 、 warning() 、 error() 和 critical()

记录器logger有以下作用
logger.setLevel():设定该记录器输出日志的最低级别
logger.addHandler() 和 Logger.removeHandler():该记录器添加或者删除处理器对象handler
logger.addFilter() 和 Logger.removeFilter(): 该记录器添加或者删除处理器对象filter
执行根记录器下的函数来输出日志消息如 logger.debug() logger.info()等

处理器handler

一个记录器logger可以有多不不同的handler,handler负责将日志消息数据输出到不同的地方,常见的用于生成处理器handler的类有
StreamHandler 将消息数据发送到标准输出流、错误流(如输出到命令行控制台)
FileHandler 将消息数据发送到文件(如写入到文件)

logging.FileHandler('filename.txt',encoding='utf-8')

如上,生成一个输出到文件的处理器handler

handler有以下面列出的函数
setLevel():设置该handler能处理的日志数据的最低级别,注意记录器logger也有方法setLevel() 记录器logger设置的级别确定将传递哪些级别的数据给handler。每个hanlder中设置的级别的确定该handler将输出哪些级别的消息
setFormatter() 设置该hanlder输出日志数据的格式
addFilter() 和 removeFilter() 分别在处理器上配置和取消配置过滤器对象

格式器formatter

格式器所谓的格式就是前面babasicConfig()方法中的format字段的内容,格式器要添加到处理器handler中来作用于handler的

image
image
执行后控制台输出
image
执行下生成指定的日志文件,文件内容
image

在配置文件中配置日志相关信息

myLogging.cnf
配置文件

[loggers]
keys=root,logging_b

[handlers]
keys=consoleHandler,textHandler

[formatters]
keys=consoleFormatter,textFormatter

[logger_root]
level=INFO
handlers=consoleHandler

[logger_logging_b]
level=INFO
handlers=consoleHandler,textHandler
qualname=logging_b
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)

[handler_textHandler]
class=FileHandler
level=CRITICAL
formatter=textFormatter
args=('myLog.txt',)
kwargs={'encoding': 'utf-8'}


[formatter_consoleFormatter]
format=>>>%(filename)s>>>%(levelname)s>>>%(message)s

[formatter_textFormatter]
format=>>>%(lineno)s>>>%(levelname)s>>>%(message)s

py文件 logging_b.py
image

在控制台和日志文件中的输出和前面不用配置文件时一样的

配置文件必须包含 [loggers], [handlers] 和 [formatters] 等部分

如果在[loggers]中有像xxxa这样的值,比如上面的logging_b,那么必须配置一个[logger_xxxa],并在下面配置该logger对应的的level handler等数据

对于[handlers] 和 [formatters]可同理类推
参照之前的不用配置文件的写法,配置文件的意思其实很好懂,对于qualname=logging_b,在上面没啥实际用处,可忽略

关于配置文件和logging更具体的信息,请参照官网
本篇代码执行环境为window 10, python3.10

标签:logging,python,--,handler,记录器,日志,级别,logger
From: https://www.cnblogs.com/MyRecords/p/17445759.html

相关文章

  • 计算机安全_jlu_ccst部分笔记
    这些是我当时复习计算机安全这门课的时候写的一些笔记(没有的部分要么是比较简单,要么是我没复习到(有的计算现在我还有别的事时间比较紧张,顾不上整理这门课的内容了,直接把图片放出来有需要的同学可以参考一下 (坏了,还少了一半,我记得当时是写了三四十页的(挠......
  • 目标检测:RPN — Faster R-CNN 的主干
    动动发财的小手,点个赞吧!在使用R-CNN的目标检测中,RPN是真正的主干,并且到目前为止已被证明非常有效。它的目的是提出在特定图像中可识别的多个对象。这种方法是由ShaoqingRen、KaimingHe、RossGirshick和JianSun在一篇非常受欢迎的论文“FasterR-CNN:TowardsRealTime......
  • 吃透Redis面试八股文
    内容摘自我的学习网站:topjavaer.cnRedis连环40问,绝对够全!Redis是什么?Redis(RemoteDictionaryServer)是一个使用C语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁......
  • 微软正在研究使 Linux 脚本更安全
    导读据悉,微软正在研究使 Linux 脚本更安全微软正在研究使Linux 脚本更安全在本周的Linux安全峰会上,systemd的创建者LennartPoettering发表了演讲,他在过去的一年中被微软雇佣,他和微软的其它工程师们正在努力提高Linux的安全性。微软的工程师发表的演讲介绍了......
  • 2023.5.31 Linux系统⽤户管理
    1.⽤户基本概述1.1⽤户相关的命令1.2⽤户创建的原理2.⽤户密码管理3.组的基本管理4.⽤户身份切换5.⽤户身份提权6.⽇志相关审计1.⽤户基本概述Linu属于多⽤户操作系统,在windows中,可以创建多个⽤户,但不允许同⼀时间多个⽤户进⾏系统登陆,但是Linux可以同时⽀持多个⽤户同时登陆......
  • [SDOI2018]旧试题
    题意求如下表达式的值\[\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ijk)\bmod(10^9+7)\]其中,\(A,B,C\leqslant10^5\)solution先考虑如何处理后面的\(d(ijk)\)根据[SDOI]2015约数个数和可知,通过简单的映射关系,有,\[d(ijk)=\sum_{u|i}\sum_{v|j}\sum_{w|k}[gcd(u,v)=1]......
  • w-process diagram
    nonumberscan'tcomapreanythingcan'tdescribetrends natrualcycles.lifecycleofabutterfly Whatcanwedescribe?howmanysteps.wheretheprocessbeginsandendseachstepintheprocess. spetslanguages:Atthefirststagein......
  • sonarqube部署安装
    镜像准备postgres:11.6sonarqube:9.0.0-communitybusybox:1.27.1安装postgressonarqube7.9及以上使用postgres为数据库使用 PVCapiVersion:v1kind:PersistentVolumeClaimmetadata:name:sonar-mysqlnamespace:demospec:accessModes:-ReadWriteMan......
  • 2023.5.31-Linux系统基本权限
    02.Linux系统基本权限1.权限修改命令chmod2.属主属组修改命令chown3.基础权限设置案例Linux中的⽂件或⽬录的权限和⽤户及⽤户组关联很⼤,Linux中每个⽂件或⽬录都有⼀组共9个基础权限位,每三个字符被分为⼀组,他们分别是属主权限位(占三个字符)、属组权限位(占三个字符)、其他⽤户权......
  • MyBatis+Sharding-JDBC实体类LocalDateTime类型字段查询报SQLFeatureNotSupportedExce
    问题最近协助渠道组开发新需求,封装实现了一个公共模块供不同渠道项目使用。以前各个渠道项目有很多相似的菜单和功能,各自项目里自己的代码实现,本公共模块对新需求的功能点进行抽象,减少重复代码,提高模块复用性和可维护性。目前有2个渠道项目接入了该公共模块,自测时发现其中1个运......