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设置的等级

最新文章

  1. Python’s SQLAlchemy vs Other ORMs[转发 3]Django's ORM
  2. SqlServer——全文索引
  3. JSch - Java实现的SFTP(文件下载详解篇)
  4. Android一个大众化的设置界面
  5. 有趣的数-回文数(Palindrome number)
  6. Oracle数据库—— 存储过程与函数的创建
  7. phpstorm自动对齐数组=>,自动加空格
  8. wamp中的phpmyadmin打开出现:#1045 - Access denied for user 'root'@'localhost' (using password: NO)
  9. Shell脚本[运算表达式,条件控制语句]
  10. struts总结
  11. Android获取系统cpu信息,内存,版本,电量等信息
  12. vim spf13
  13. linux 手动安装 oracle(转)
  14. linux系统必学-部分链接
  15. ES6 学习笔记之二 块作用域与闭包
  16. 自定义switchButton
  17. 源码解析之HashMap源码
  18. IT老人,给后辈的十一点建议
  19. 搭建Hexo博客(四)-设置
  20. Python中的一些小语法

热门文章

  1. 蜗牛—ORACLE基础之触发器学习(三)
  2. 中国移动OnetNet云平台 使用以太网传输数据流步骤
  3. 七招从办公室政治中取胜 发表于 09 May 2008 ? 领导力培养
  4. Zookeeper启动Permission denied
  5. c的详细学习(9)结构体与共用体的学习(一)
  6. 汇编语言入门(在debug中编辑和调试程序)
  7. JavaScript 练习,变量,数组,函数,对象, with for 语句
  8. python第四篇:linux命令行总结 + 自动备份Python程序
  9. 造成segmentation fault的可能原因分析
  10. 关于phonegap的cookie