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 ...
随机推荐
- ubuntu查看Mysql是否已启动
sudo netstat -tap | grep mysql 命令行输出: tcp6 0 0 [::]:mysql [::]:* ...
- ARDUINO解析GPS数据,读取出来GPRMC帧数据
测试板子使用ARDUINO MEGA2560 #include <TimerOne.h> #define GPSSerial Serial1 #define DebugSerial Ser ...
- 阿里云 rails nginx 配置https访问
1.申请免费型dv ssl证书:https://common-buy.aliyun.com/?spm=a2c4e.11155515.0.0.7zzvOZ&commodityCode=cas#/ ...
- mysql设置有外键的主键自增及其他
有外键的主键设置自增. ; ALTER TABLE `<table>` MODIFY COLUMN `id` ) NOT NULL AUTO_INCREMENT FIRST; 创建数据库, ...
- 在linux系统下Git源码系统的文件下载
Git是一个开源的分布式版本控制系统,在linux系统中下载git中的文件使用repo的很多. 网上有很多repo下载的地址失效,目前可用的链接在这里记录一下. 没有安装git的安装一下: sudo ...
- python编写脚本应用实例
这里主要记录工作中应用python编写脚本的实例.由于shell脚本操作数据库(增.删.改.查)并不是十分直观方便,故这里采用python监控mysql状态,然后将状态保存到数据库中,供前台页面进行调 ...
- hd acm1008
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- Ubuntu下,grep的用法
grep(Global search Regular Expression and Print out the line)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.U ...
- Linux LVM管理
创建和管理LVM 要创建一个LVM系统,一般需要经过以下步骤: 1. 创建分区 fdisk /dev/sdb 使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别 ...
- JavaWeb -- Servlet运行过程 和 细节
Servlet的运行过程 lServlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则 ...