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. Python 中奇妙的下划线

    单个下划线(_) 通常有三种用法: 在python解释器: 单个下划线代表上次在交互解释期对话中(控制台)执行的结果.这种情况在标准的CPython解释器中首次被实现,接下来这种习惯也被保持下来: & ...

  2. nc传文件

    nc传文件 先启动接收方 nc -l -p 9999 > index.lua 后启动发送方 nc 192.168.1.1 9999 < index.lua

  3. ARDUINO W5100 WebServer测试

    1.直接下载官方的enternet->WebServer代码 /* Web Server A simple web server that shows the value of the anal ...

  4. 10 个经典PHP函数

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

  5. CentOS取消屏幕保护自动锁屏功能

    CentOS系统在用户闲置一段时间(默认为5分钟)后,会启动屏幕保护程序(默认的屏保为黑屏),并要求重新输入密码才能回到原来的桌面. 设置屏幕保护:System -> Preferences - ...

  6. float后怎么居中

    我们在用css float的时候,如何让文本水平居中真的很麻烦, [float]使div(或者其他标签)的宽度自适应其内容,但它却有个弊端:无法居中.[display:inline-block]也有同 ...

  7. OSI 与 TCP/IP

    OSI参考模型 物理层(Physical Layer) --- 数据表示.物理层规定了激活.维持.关闭通信端点之间的机械特性.电气特性.               功能特性以及过程特性.该层为上层协 ...

  8. c的详细学习(6)函数

        根据模块化程序设计的原则,一个较大的程序一般要分为若干个小模块,每个模块实现一个比较简单的功能.在c语言中,函数是一个基本的程序模块.     (1)函数的基本概念: 1)基本介绍: 任何一个 ...

  9. leetcode 889. Spiral Matrix III

    On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east. Here, the north ...

  10. 【leetcode刷题笔记】Edit Distance

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...