Python模块-logging模块(二)
logging模块记录日志有四个主要类:logger,handler,formatter,filter
logger提供了应用程序可以直接使用的接口,每个程序在输出信息之前都要获得一个Logger
handler将(logger创建的)日志记录发送到合适的目的输出,handler可以把信息输出到控制台,也可以把信息输出到文件,还可以把信息发送到网络上
formatter决定日志记录的最终输出格式
filter用来过滤日志记录,filter函数返回布尔值,logger根据返回的布尔值决定过滤的语句
在屏幕打印日志的同时写入日志文件:
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" import logging class IgnoreBackupLogFilter(logging.Filter):
'''忽略带warning的日志'''
def filter(self, record): #固定写法
return 'warning' not in record.getMessage() #返回布尔类型 logger = logging.getLogger('web') #生成一个Logger对象,web为logger对象的名称
logger.setLevel(logging.INFO) #设置等级,默认为warning stream_handler = logging.StreamHandler() #生成handler对象,用于屏幕上打印
file_handler = logging.FileHandler('web.log') #生成handler对象。用于生成日志文件 #把handler对象绑定到logger
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
# logger.removeHandler(stream_handler) #删除handler对象
# logger.removeHandler(file_handler) #生成formatter对象,用于屏幕上打印
stream_formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s - %(message)s')
#生成formatter对象,用于日志文件
file_formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelno)s - %(message)s') #把formatter对象到handler对象
stream_handler.setFormatter(stream_formatter)
file_handler.setFormatter(file_formatter) logger.addFilter(IgnoreBackupLogFilter()) #对日志内容进行过滤
#logger.removeFilter(IgnoreBackupLogFilter()) #删除filter对象 logger.debug('The Debug')
logger.info('The info')
logger.warning('The warning')
logger.error('The error')
logger.critical('The critical')
运行结果

日志内容

日志截断
根据文件大小
如日志文件为web.log,当web.log达到指定的大小之后,RotatingFileHandler自动把文件改名为web.log.1,如果web.log.1已经存在,会先把web.log.1重命名为web.log.2,最后重新创建web.log,继续输出日志信息
handlers.RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
filename和mode两个参数和FileHandler一样,maxBytes为日志文件最大的大小,如果maxBytes为0,意味着日志文件可以无限大,就不再新建日志文件了。backupCount为生成的最多备份日志文件数,如果指定为3,就最多生成3个备份日志文件,如果备份日志文件已经生成3个了,再生成日志文件的话,web.log.3并不会被更名,而是被删除
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" import logging
from logging import handlers logger = logging.getLogger('web')
logger.setLevel(logging.INFO) file_handler = handlers.RotatingFileHandler('web.log',maxBytes=5,backupCount=3) logger.addHandler(file_handler) file_formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelno)s - %(message)s') file_handler.setFormatter(file_formatter) logger.debug('The Debug')
logger.info('The info')
logger.warning('The warning')
logger.error('The error')
logger.critical('The critical')
运行

生成了4个日志文件,web.log为最新的日志,web.log.3为最早的日志
根据时间
间隔指定的时间自动创建新的日志文件,重命名的过程与RotatingFileHandler类似,不过新的文件的命名方式为当前的时间
handlers.TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
filename参数和backupCount参数和RotatingFileHandler的作用一样
when参数是一个字符串。表示时间间隔的单位,不区分大小写。S为秒,M为分,H为小时,D为天,W为每星期(interval=0时为星期一),midnight为每天凌晨
interval为时间间隔
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" import logging
from logging import handlers logger = logging.getLogger('web')
logger.setLevel(logging.INFO) file_handler = handlers.TimedRotatingFileHandler('web.log',when='s',interval=3,backupCount=5) logger.addHandler(file_handler) file_formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelno)s - %(message)s') file_handler.setFormatter(file_formatter) logger.debug('The Debug')
logger.info('The info')
logger.warning('The warning')
logger.error('The error')
logger.critical('The critical')
每隔5秒生成一个,需要运行才生成
运行结果

等级
logger设置的等级为最高的,脚本中以此为主
handler中设置的等级级别比logger设置的等级级别低
所以handler中打印的日志建立在logger的级别上,再考虑handler设置的等级
Python模块-logging模块(二)的更多相关文章
- Python之logging模块
一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...
- python模块 ---logging模块
摘要by crazyhacking: 与log4cxx一样,分为三个部分,logger, handler,formatter. 详细内容参考:1官网http://docs.python.org/2/h ...
- Python的logging模块详解
Python的logging模块详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...
- python之 logging 模块(上篇)
一.日志关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件 ...
- python的logging模块
python提供了一个日志处理的模块,那就是logging 导入logging模块使用以下命令: import logging logging模块的用法: 1.简单的将日志打印到屏幕上 import ...
- python的logging模块之读取yaml配置文件。
python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...
- Python全栈之路----常用模块----logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- python中logging模块的用法
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- Python模块——logging模块
logging模块简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块, 由标准库模块提供日志记录API的关键好处是 ...
- python基础--logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
随机推荐
- lzugis—搭建属于自己的小型的版本号控制SVN
版权声明:本文为LZUGIS原创文章,未经同意不得转载. https://blog.csdn.net/GISShiXiSheng/article/details/28643575 对于不了解SVN的同 ...
- 几款Java常用基础工具库
通用工具类(字符串.时间格式化.BeanUtils.IO) 1. commons-lang3库 1.1. org.apache.commons.lang3.StringUtils类 日常代码中,我们经 ...
- androidAndroid开发学习--Ionic+Cordova 环境搭建
我们看 Ionic 能给我们提供什么? 一个样式库,你可以使用它 来 装饰你的 HTML 网页 ,看起来 想 移动程序的 界面,什么 header .content.footer.grid.list ...
- ubuntu防火墙
开启防火墙 sudo ufw enable 关闭防火墙 sudo ufw disable 查看防火墙状态 sudo utw status
- jQuery设计理念
jQuery设计理念 引用百科的介绍: jQuery是继prototype之后又一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1. ...
- dojo 官方翻译 dojo/json 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/json.html#dojo-json require(["dojo/json&q ...
- FHQ_treap
上个月还在舔\(splay\):\(FHQ-treap\)太好打了吧真香 前言 还是建议先把\(splay\)学好再看,讲得会比较粗略(但该有的不会少),或者左转其他文章 \(FHQ-treap\)是 ...
- Idea 包名按树形结构展示
Idea默认包名展示如图: 感觉这样展示,在包下面建包的时候不方便,可以在 设置按钮 里面去掉 Flatten Packages 和 Compact Empty Middle Packages,设置如 ...
- 简单封装的Log4net
1. [代码]使用 log = new Logger(this.GetType());log.Info("Hello world.");2. [代码]第二个版本,修复了Co ...
- Unity3D连接WCF
Unity3D连接WCF: 一.最简单的案例 1.VS2015中: (1)建立WCF应用服务程序ForUnity: (2)将自动生成的IService1.cs与Service1.svc删除: (3 ...