【学习笔记】python 日志logging(一)

本文详细介绍了Python的logging模块,包括使用原因、模块结构、主要逻辑及各组件(记录器、处理器、过滤器和格式器)的工作原理。通过设置日志级别、过滤器和处理器,可以灵活控制日志的输出和保存,适用于不同级别的日志信息记录。
摘要由CSDN通过智能技术生成

第一:为什么使用logging模块

  • 灵活性好,方便配置
  • 输出或保存不同级别日志

第二:logging模块结构

logging 在源码中有三个文件,结构如下:

├── config.py
├── handlers.py
└── __init__.py
_int.py中实现了基础功能,主要的逻辑就在这个文件中
handlers.py 是一些Handlers用起来很方便的.

config.py 是对配置做处理的方法.


第三:主要的逻辑



1.调用关系【这张图简单明了,盗用了】



2.逻辑
  • A: 获取logger日志记录器实例
logger = logging.Getlogger(__name__)
  • B: 设置日志记录器层级和内容

也可以添加过滤器

logger.info('info')
  • C: 处理器handlers设置,并添加到logger实例(可以同时添加多个处理器)

处理器设置属性:处理日志层级,日志格式器,过滤器,对应处理器选择

formater = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
file_handler = logging.handlers.RotatingFileHandler(filename='logs/jessproxy.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formater)    
consle_handle = logging.StreamHandler()
consle_handle.setLevel(logging.INFO)   
consle_handle.setFormatter(formater)
logger.addHandler(file_handler)
logger.addHandler(consle_handle)
  • D: 过滤器Filter

多种过滤器能同时应用在记录器和处理器

  • E:  格式器Formatter
格式器负责将丰富的元数据日志记录转换为字符串,一般应用在处理器中
3.日志工作流程图

第四:各模块介绍

  • 日志层级

logging模块将日志分为了五个等级:

  • DEBUG:调试信息,通常在诊断问题的时候用得着;
  • INFO:普通信息,确认程序安装预期运行;
  • WARNING:警告信息,表示发生了意想不到的事情,或者指示接下来可能会出现一些问题,但是程序还是继续运行;
  • ERROR:错误信息,程序运行中出现了一些问题,一些功能没有执行;
  • CRITICAL:危险信息,一个严重的错误,导致程序无法继续运行。

五个等级的日志信息分别使用:logging模块的debug()、info()、warning()、error()、critical()方法来实现。

默认情况下,logging使用的日志级别是warning,这表示只有在这个级别及其以上级别的日志信息才会被记录,所以默认情况下debug信息和info信息都不会被显示出来。

  • 记录器Logger

日志记录器(Logger)是日志处理的核心组件,包含了需要记录日志的地方、变化的字符串、参数、请求的信息队列等信息。
  • Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
  • Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
  • Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
  • Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别
  • 设置logger的level
  • 处理器Handler

处理器Handlers 将logger发过来的信息进行准确地分配至其他终端。

在logging模块中,有很多种日志处理器用于不同的用途,下面介绍几个常用的:

  • StreamHandler:用于将日志消息发送到控制台;
  • FileHandler:用于将日志消息写入文件中;
  • SMTPHandler:用于将日志消息发送到指定的电子邮箱;
  • HTTPHandler:使用GET或POST方法将日志消息发送给某个HTTP服务器;

其中我们最常使用的,还是FileHandler处理器,将日志消息写入文件中。

此外,处理器的设置

  • Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
  • Handler.setFormatter():给这个handler选择一个格式
  • Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象


  • 过滤器Filter

默认的Filter类,需要获取一个字符串类型的参数,该参数是用来判断日志信息是否允许被记录。Filter类中有一个filter方法,该方法返回真则表示日志信息被记录,否则将丢弃,不再处理。如果该参数为空字符串,则filter方法返回真;否则,该字符串参数表示着一个Logger(每个Logger对象都有一个用点分隔的字符串名字),只有当前处理日志信息的Logger对象是该字符串参数指定的Logger对象或子对象,filter方法才返回真,其它情况返回假。

LOG=logging.getLogger(”chat.gui.statistic”)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(’%(asctime)s %(levelname)s %(message)s’)
console.setFormatter(formatter)
filter=logging.Filter(”chat.gui”)
console.addFilter(filter)
LOG.addHandler(console)

Handler上添加了一个过滤器。现在我们输出日志信息的时候就会经过过滤器的处理。名为“A.B”的过滤器只让名字带有 “A.B”前缀的Logger输出信息。可以添加多个过滤器,只要有一个过滤器拒绝,日志信息就不会被输出。另外,在Logger中也可以添加过滤器。

  • 格式器Famatter

设置日志信息最后的规则、结构和内容。Formatters 指定了最终某条记录打印的格式布局。Formatter会将传递来的信息拼接成一条具体的字符串,默认情况下Format只会将信息%(message)s直接打印出来。Format中有一些自带的LogRecord属性可以使用。

AttributeFormatDescription
asctime%(asctime)s将日志的时间构造成可读的形式,默认情况下是‘2016-02-08 12:00:00,123’精确到毫秒
filename%(filename)s包含path的文件名
funcName%(funcName)s由哪个function发出的log
levelname%(levelname)s日志的最终等级(被filter修改后的)
message%(message)s日志信息
lineno%(lineno)d当前日志的行号
pathname%(pathname)s完整路径
process%(process)s当前进程
thread%(thread)s当前线程


主要参考链接:

  1. http://www.52ij.com/jishu/666.html
  2. https://blog.csdn.net/iodjsvf8u1j7kyc/article/details/79244832
  3. https://blog.csdn.net/liyh_xd/article/details/78713407
  4. http://python.jobbole.com/87300/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值