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模块(二)的更多相关文章

  1. Python之logging模块

    一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...

  2. python模块 ---logging模块

    摘要by crazyhacking: 与log4cxx一样,分为三个部分,logger, handler,formatter. 详细内容参考:1官网http://docs.python.org/2/h ...

  3. Python的logging模块详解

          Python的logging模块详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...

  4. python之 logging 模块(上篇)

    一.日志关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件 ...

  5. python的logging模块

    python提供了一个日志处理的模块,那就是logging 导入logging模块使用以下命令: import logging logging模块的用法: 1.简单的将日志打印到屏幕上 import ...

  6. python的logging模块之读取yaml配置文件。

    python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...

  7. Python全栈之路----常用模块----logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  8. python中logging模块的用法

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  9. Python模块——logging模块

    logging模块简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块, 由标准库模块提供日志记录API的关键好处是 ...

  10. python基础--logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

随机推荐

  1. 11.2.3 Redis的启动停止

    11.2.3  Redis的启动停止 Redis安装配置完成后,启动过程非常简单,执行命令/usr/local/redis/bin/redis-server /usr/local/redis/etc/ ...

  2. 10 个经典PHP函数

    这篇文章主要介绍了php中的10个比较经典的函数,不太常见,可以满足有特殊需求的朋友 1. sys_getloadavg() sys_getloadavt()可以获得系 统负载情况.该函数返回一个包含 ...

  3. linux下tomcat的配置及项目的部署流程

    Java的安装配置 1. 在/etc/profile文件中配置相应的信息(如下) export JAVA_HOME=/usr/java/jdk1.6.0_20 export JRE_HOME=/usr ...

  4. 开发rsync启动脚本2

    使用函数更加规范的开发rsync启动脚本 #!/bin/bash #chkconfig: #description: create by vincen . /etc/init.d/functions ...

  5. Fidder工具抓包及篡改数据

    下载fiddler的最新版本: 运行fiddler之后测试要调试的页面是否可以捕获,刷新页面后左边列表会实时显示目前http请求的条目.如图红色部分 测试成功,开始断点捕获数据 点击菜单栏按钮[Rul ...

  6. castle windsor学习-----Fluent Registration API 注册

    使用xml配置和fluent注册两种搭配使用需要注意的是: 如果先在WindsorContainer构造函数指明用xml配置进行注册,如下设置 IWindsorContainer container ...

  7. 大话设计模式--命令模式 Command -- C++实现实例

    1. 命令模式: 将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 命令模式有点: a. 较容易的设计一个命令队列 b. 在需要的的情况 ...

  8. Codeforces Round #335 (Div. 2) C. Sorting Railway Cars

    C. Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  9. CSS基础语法和CSS经常用到的知识点总结

    1. [代码]css基础教程     CSS基础语法CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明.每条声明由一个属性和一个值组成.每个属性有一个值.属性和值被冒号分开.例如:下面这行代 ...

  10. Luogu P1196 [NOI2002]银河英雄传说:带权并查集

    题目链接:https://www.luogu.org/problemnew/show/P1196 题意: 有30000个战舰队列,编号1...30000. 有30000艘战舰,编号1...30000, ...