博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十一篇 logging模块
阅读量:4971 次
发布时间:2019-06-12

本文共 3488 字,大约阅读时间需要 11 分钟。

logging模块是Python中内置的很强大的一个日志模块,它可以帮我们记录程序运行的情况,对于后续排错有很好的帮助。

logging模块定义了下表所示的日志级别,按照严重程度由低到高排列:

级别 使用时机
DEBUG 详细信息,常用来打印
INFO 程序正常运行过程中产生的信息
WARNING 告诉用户,虽然程序正常运行,但是可能会产生错误
ERROR 由于很严重的问题,程序不能执行功能
CRITICAL 严重错误,程序已经不能继续运行

 

 

 

 

 

说明:默认情况下的级别是WARNING,表示只有WARNING和比WARNING严重的事件才会被记录。

1.基本用法

# -*- coding:utf-8 -*-import logginglogging.info("info message")logging.debug("debug message")logging.warning("warn message")logging.error("error message")logging.critical("critical message")------输出内容------- WARNING:root:warn messageERROR:root:error messageCRITICAL:root:critical message

从上面的结果中可以看出,默认情况下,logging模块是将输出的结果直接打印到屏幕上的,而且info和debug级别的日志都没有打印,即默认情况下,只有级别大于debug的日志才能输出,输出日志的格式“日志级别:实例名:日志信息”。

那么如何将日志输出到文件中呢?

如果需要将日志输出到文件中,在调用logging模块记录日志前,需要做个简单的配置:

# -*- coding:utf-8 -*-import logging# 设置日志输出的文件和日志的等级logging.basicConfig(filename="logger.log", level=logging.INFO)logging.info("info message")logging.debug("debug message")logging.warning("warn message")logging.error("error message")logging.critical("critical message")

查看生成的logger.log文件内容,大于等于info级别的日志均输出:

INFO:root:info messageWARNING:root:warn messageERROR:root:error messageCRITICAL:root:critical message

 2.更加完善的日志功能

Logger,Handler,Formatter,Filter是日志模块的几个基本概念:

Logger:记录器,提供日志相关功能的调用接口。

Handler:处理器,将记录器产生的日志发送到合适的目的地(文件或者控制台)。

Filter:过滤器,它可以控制输出哪些日志记录。

Formatter:格式化器,设置最终输出日志记录的格式。

1)Logger,是日志记录功能的载体

# -*- coding:utf-8 -*-import logginglogger = logging.getLogger("log_name")logger.debug("debug message")logger.info("info message")logger.warning("warn message")logger.error("error message")logger.critical("critical message")

说明:Logger对象不能直接实例化,而是通过logging.getLogger(name)来创建Logger实例。

2)Handler,将日志设置为指定的输出

我们在实际的开发过程中经常会希望把所有的日志都输出到log文件中,把日志等级等于和高于ERROR的信息输出到控制台,日志等级为CRITICAL的信息邮件通知,这样的话,需要设置三个Handler,然后通过Logger对象的addHandler()方法添加多个Handler,但是我们添加Handler,只能是Handler的子类对象,常用的有StreamHandler,FileHandler,NullHandler。

3)Formatter,格式化输出

该类可以直接初始化对象,即formatter = logging.Formatter(fmt=None,datefmt=None),fmt为修改日志格式,datefmt为修改时间格式,默认的日志格式为:%(asctime)s - %(levelname)s - %(message)s,默认的时间格式为%Y-%m-%d %H:%M:%S。

fmt的参数可以为:

属性 格式 描述
asctime %(asctime)s 日志产生的时间,默认为2019-03-30 20:09:12,333
filename %(filename)s 生成日志的程序名
funcName %(funcName)s 调用日志的函数名
levelname %(levelname)s 日志级别
lineno %(lineno)d 日志针对的代码行号
message %(message)s 具体的日志信息

 

 

 

 

 

 

4)Filter,控制哪些日志可以输出

默认情况下,filter只允许指定logger层级下的日志消息通过过滤,例如:filter=logging.Filter('A.B'),则logger'A.B','A.B.C',可以通过过滤,但是'A.BB'不能通过,如果以空字符串初始化filter,则所有的日志消息均可以通过过滤。

说明:Filter在日志功能配置中不是必须的,如果对日志消息过滤需求比较负责再使用就行。

3.日志模块的使用

通过日志文件配置日志时,配置文件通常以.ini后缀名,日志模块使用logging.config.fileConfig('config.ini'):

##############################[loggers]keys=root,example01[logger_root]level=DEBUGhandlers=consoleHandler[logger_example01]level=INFOhandlers=consoleHandlerqualname=simpleExamplepropagate=0##############################[handlers]keys=consoleHandler[handler_consoleHandler]class=StreamHandlerlevel=DEBUGformatter=exampleFormatterargs=(sys.stdout,)##############################[formatters]keys=exampleFormatter[formatter_exampleFormatter]format=%(asctime)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s##############################

demo.py

# -*- coding:utf-8 -*-import loggingimport logging.configfrom os import pathlogging.config.fileConfig("config.ini")logger = logging.getLogger("root")logger.debug("debug message")logger.info("info message")logger.warning("warn message")logger.error("error message")logger.critical("critical message")

 

转载于:https://www.cnblogs.com/zhuzhaoli/p/10564154.html

你可能感兴趣的文章
Learning Cocos2d-x for XNA(2)——深入剖析Hello World
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>
Http协议
查看>>
手机端web开发必备代码
查看>>
[SDOI2008]洞穴勘测
查看>>
NOI2014 购票
查看>>
Difference between Linearizability and Serializability
查看>>
电影《绿皮书》
查看>>
IDEA使用操作文档
查看>>
如何对网课、游戏直播等进行录屏
查看>>
UIView
查看>>
有关去掉谷歌及火狐浏览器文本框 数字类型 上下箭头的方法
查看>>
MySQL数据迁移到SQL Server
查看>>
复杂链表的复制(python)
查看>>
添加日期选择控件
查看>>
jquery.cookie.js操作cookie
查看>>
javascript遍历数组
查看>>
bzoj4765: 普通计算姬 (分块 && BIT)
查看>>
thinkphp5-----模板中函数的使用
查看>>
POJ-3211 Washing Clothes[01背包问题]
查看>>