logging日志管理

1.日志作用

不管是在项目开发还是测试过程中,项目运行一旦出现问题日志信息就非常重要了。日志是定位问题的重要手段,就像侦探人员要根据现场留下的线索来推断案情。

2.日志级别

脚本运行会有很多的情况,比如调试信息、报错异常信息等。日志要根据这些不同的情况来继续分级管理,不然对于排查问题的筛选会有比较大的干扰。日志一般定位的级别如下:

级别何时使用
debug调试信息,也是最详细的日志信息。
info证明事情按预期工作。
warning表明发生了一些意外,或者不久的将来会发生问题(如磁盘满了),软件还是在正常工作。
error由于更严重的问题,软件已不能执行一些功能了。
critical严重错误,表明软件已不能继续运行了。

普通输出直接用info类型,调试的时候用debug类型,如果预计有错误时那么我们就需要用error类型的日志。

3.日志格式

时间+模块+行数+日志具体信息

4.python的logging模块

logging模块包括Logger,Handler,Filter,Formatter四个部分。

名称描述
Logger记录器,用于记录日志。
Handler处理器,将日志记录发送至合适的路径。
Filter过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter格式化器,指明了最终输出中日志的格式。

5.Logger记录器

Logger是一个树形层级结构,在使用接口debug,info,warn,error,critical;使用之前必须创建Logger实例,即创建一个记录器。
如果没有显式的进行创建,则默认创建一个root logger,并应用默认的日志级别(warn),Handler和Formatter。

import logging
import logging

logging.basicConfig(filename='run.log', level=logging.DEBUG)
logging.debug('this is a debug')  # 最低级别日志
logging.info('this is a info')
logging.warning('this is a warn')
logging.error('this is a error')
logging.critical('this is a critical')  # 最高级别日志

basicConfig 部分参数:
filename 指定日志文件名称。
filemode 指定打开文件的模式,如果指定了filename(如果文件模式未指定,则默认为a)。
format 为处理程序使用指定的格式字符串。
datefmt 使用指定的日期/时间格式。样式如果指定了格式字符串,则使用它来指定,格式字符串的类型
level 将根记录器级别设置为指定级别。

Tips:文件读写模式
w 以写方式打开
W 文件若存在,首先要清空,然后(重新)创建
a 以追加模式打开(从EOF开始,必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开
a+ 以读写模式打开

6.Handler处理器

将日志记录发送至合适的路径,常用的处理器类有三个:

  • StreamHandler
    将日志记录输出发送到诸如sys.stdout,sys.stderr或任何类似文件流的对象。输出在控制台。
  • FileHandler
    将日志记录输出发送到磁盘文件,它继承了StreamHandler的输出功能。输出在文件里。
  • NullHandler
    不做任何格式或输出

7.Filter过滤器

Handlers和Loggers可以使用Filters来完成比级别更复杂的过滤,一般只用于比较特殊的定制化需求。

8.Formatter格式化器

使用Formatter对象设置日志信息显示的规则,结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。

格式描述
%(levelno)s打印日志级别的数值
%(levelname)s打印日志级别名称
%(pathname)s打印当前执行程序的路径
%(filename)s打印当前执行程序名称
%(funcName)s打印日志的当前函数
%(asctime)s打印日志的时间
%(thread)d打印线程id
%(threadName)s打印线程名称
%(process)d打印进程ID
%(message)s打印日志信息
logging.basicConfig(filename='run.log', level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d %(levelname)s %(message)s')

在这里插入图片描述

9.项目中日志使用方法

logger.conf 日志格式配置文件(使用时去掉备注部分)

[loggers]
keys=root,infoLogger  # 创建两个记录器

[logger_root]
level=INFO	# 日志显示info级别以上的
handlers=consoleHandler,fileHandler	# 控制台和日志文件两种显示方式

[logger_infoLogger]
handlers=consoleHandler,fileHandler	# 控制台和日志文件两种显示方式
qualname=infoLogger	
propagate=0	# 0表示输出日志,但不往更高级别的日志进行传递,比如不往root logger传递

[handlers]
keys=consoleHandler,fileHandler	# 控制台和日志文件两种显示方式

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=INFO	# 日志文件输出的日志级别
formatter=form01	# 日志格式
args=('../log/ggmzx.log', 'a')	# 日志文件路径

[formatters]
keys=form01,form02	# 创建两种日志格式

[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

[formatter_form02]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

logger_config.py

import logging.config

conf_file = 'logger.conf'
logging.config.fileConfig(conf_file)
logger = logging.getLogger()

test.py

import logging.config

logger.info('this is a info')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值