Logging模块学习记录
来源:互联网 发布:淘宝永久封店 身份证 编辑:程序博客网 时间:2024/05/21 01:53
一:logging 和 print 有什么不同呢。它有以下的优势:
你可以控制消息的级别,过滤掉那些并不重要的消息。 你可决定输出到什么地方,以及怎么输出。 有许多的重要性别级可供选择,debug、info、warning、error 以及 critical。通过赋予 logger 或者 handler 不同的级别,你就可以只输出错误消息到特定的记录文件中,或者在调试时只记录调试信息
默认情况下:logging模块将大致打印到屏幕上,日志级别为 等于或高于WARNING 级别的日志信息才会输出。
日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
默认级别:
二:要整明白的几个概念:
Logger 记录器: 暴露了应用程序代码能直接使用接口
Handler 处理器: 将(记录器产生)日志记录发送至合适的目的地
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录
Formatter 格式化器:指明了最终输出中日志记录的布局。
简单的理解:logging库提供了多个组建:Logger、Handler、Filter、Formater。 Logger对象提供应用程序可直接使用的接口,Handler发送日志到合适的指定的目的地,Filter提供了过滤日志信息的方法,Formatter 指定日志显示的格式
以上几个概念分别具体能做什么?
Logger记录器是一个属性层级结构,在使用接口debug
,inof,warn,error,critical 之前必须创建logger实例,也就是记录器,如果没有显示的创建 ,则会默认创建一个rootlogger,并用用默认的日志级别(WARN),处理器Handler(StreamHandler,即将日志信息打印输出在标准输出上),和格式化器Formatter(默认的格式即为第一个简单使用程序中输出的格式)。
实例:logger=logging.getLogger(logger_name)
接着Logger实例可以对日志级别进行设置:(大于等于这个级别的日志才会被输出)
logger.setLevel(logging.WARNING)
继续增加处理器Handler&删除:
logger.addHandler(handler_warn)
logger.removeHandler(handler_warn)
Handler 处理器常用三种:StreamHandler,FileHandler,NullHandler(以下实例中会用到)
实例步骤:
1 import logging 2 # 1.创建日志对象 3 logger=logging.getLogger() 4 5 loggera=logging.getLogger('myselflogging') #w 6 loggera.setLevel(logging.DEBUG) 7 8 loggerb=logging.getLogger('myselflogging') 9 loggerb.setLevel(logging.INFO)10 11 loggerc=logging.getLogger('myselflogging.a')12 loggerc.setLevel(logging.WARNING )13 14 loggerd=logging.getLogger('myselflogging.a.a')15 loggerd.setLevel(logging.ERROR)16 17 loggere=logging.getLogger('myselflogging.a.a.a')18 loggere.setLevel(logging.CRITICAL)19 20 # 2.1创建一个Handler 用来写入日志文件21 fobj=logging.FileHandler('./FileHandler.log')22 # 2.2创建一个Handler 用来在控制台显示23 sobj=logging.StreamHandler()24 # 3.定义Handler输出的格式25 foramtter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')26 fobj.setFormatter(foramtter)27 sobj.setFormatter(foramtter)28 # 4.添加日志消息处理器29 logger.addHandler(fobj)30 logger.addHandler(sobj)31 32 #日志输出33 print('未显示设定日志等级,默认为Warning')34 logger.debug('logger debug message')35 logger.info('logger info message')36 logger.warning('logger warning message')37 logger.error('logger error message')38 logger.critical('logger critical message')39 40 print('loggera=myselflogging,显示设定等级是:logging.DEBUG')41 loggera.debug('loggera debug message')42 loggera.info('loggera info message')43 loggera.warning('loggera warning message')44 loggera.error('loggera error message')45 loggera.critical('loggera critical message')46 47 print('loggerb=myselflogging,显示设定等级是:logging.INFO')48 loggerb.debug('loggerb debug message')49 loggerb.info('loggerb info message')50 loggerb.warning('loggerb warning message')51 loggerb.error('loggerb error message')52 loggerb.critical('loggerb critical message')53 54 print('loggerc=myselflogging,显示设定等级是:logging.WARNING')55 loggerc.debug('loggerc debug message')56 loggerc.info('loggerc info message')57 loggerc.warning('loggerc warning message')58 loggerc.error('loggerc error message')59 loggerc.critical('loggerc critical message')60 61 print('loggerd=myselflogging,显示设定等级是:logging.ERROR')62 loggerd.debug('loggerd debug message')63 loggerd.info('loggerd info message')64 loggerd.warning('loggerd warning message')65 loggerd.error('loggerd error message')66 loggerd.critical('loggerd critical message')67 68 print('loggere=myselflogging,显示设定等级是:logging.CRITICAL')69 loggere.debug('loggere debug message')70 loggere.info('loggere info message')71 loggere.warning('loggere warning message')72 loggere.error('loggere error message')73 loggere.critical('loggere critical message')
输出:
2017-07-28 00:20:59,698-root-WARNING-logger warning message
2017-07-28 00:20:59,698-root-ERROR-logger error message
2017-07-28 00:20:59,698-root-CRITICAL-logger critical message
2017-07-28 00:20:59,698-myselflogging-INFO-loggera info message
2017-07-28 00:20:59,698-myselflogging-WARNING-loggera warning message
2017-07-28 00:20:59,698-myselflogging-ERROR-loggera error message
2017-07-28 00:20:59,699-myselflogging-CRITICAL-loggera critical message
2017-07-28 00:20:59,699-myselflogging-INFO-loggerb info message
2017-07-28 00:20:59,699-myselflogging-WARNING-loggerb warning message
2017-07-28 00:20:59,699-myselflogging-ERROR-loggerb error message
2017-07-28 00:20:59,699-myselflogging-CRITICAL-loggerb critical message
2017-07-28 00:20:59,699-myselflogging.a-WARNING-loggerc warning message
2017-07-28 00:20:59,699-myselflogging.a-ERROR-loggerc error message
2017-07-28 00:20:59,699-myselflogging.a-CRITICAL-loggerc critical message
2017-07-28 00:20:59,700-myselflogging.a.a-ERROR-loggerd error message
2017-07-28 00:20:59,700-myselflogging.a.a-CRITICAL-loggerd critical message
2017-07-28 00:20:59,700-myselflogging.a.a.a-CRITICAL-loggere critical message
根据以上信息要清除以下几点:
1.未显示定义日志等级,默认日志级别WARNIING,所以结果只输出了大于等于WARNIING级别的信息。
2.日志名称一样,返回的其实是一个实例,loggera 和 loggerb 的记录器名称一样,使用这个技巧就可以跨模块调用同样的logger来记录日志。因为b设置的INFO级别,所以a按照b的设置显示,所以不显示debug级日志
未完待续
封装在自动化的运用:
1 #! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # __author__ = "Q1mi" 4 # Email: master@liwenzhou.com 5 # Date: 2017/7/28 6 7 import logging 8 import os 9 import time10 11 flie_logpath='D:\\PY_HtmlReport\\logreport'12 13 class CreateLog():14 15 def __init__(self):16 17 #创建文件名称18 self.logname = os.path.join(flie_logpath, '%s.log' % time.strftime('%Y_%m_%d'))19 #创建记录器Logger20 self.logger=logging.getLogger()21 #设置LOGGER级别22 self.logger.setLevel(logging.DEBUG)23 24 #设置日志输出格式25 self.formatter=logging.Formatter('%(asctime)s-%(filename)s-%(levelname)s-%(message)s')26 27 #类的私有方法28 def __printaddhandler(self,level,message):29 #创建一个Handler 输出到本地30 fh=logging.FileHandler(self.logname,'a',encoding='UTF-8') #追加模式31 #设置本地文件日志等级32 fh.setLevel(logging.DEBUG)33 #输出格式设置34 fh.setFormatter(self.formatter)35 #把logger添加到Handler36 self.logger.addHandler(fh)37 # 创建一个Handler到控制台38 sh =logging.StreamHandler()39 sh.setLevel(logging.DEBUG)40 sh.setFormatter(self.formatter)41 self.logger.addHandler(sh)42 #逐步判断传入日志等级参数:43 if level=='info':44 self.logger.info(message)45 elif level =='debug':46 self.logger.debug(message)47 elif level =='warning':48 self.logger.warning(message)49 elif level =='error':50 self.logger.error(message)51 elif level =='critical':52 self.logger.critical(message)53 #预留重复输出日志54 self.logger.removeHandler(fh)55 self.logger.removeHandler(sh)56 57 #关闭打开的日志文件58 fh.close()59 60 def debug(self,message):61 #在内部访问类的私有方法:62 self.__printaddhandler('debug',message)63 64 def info(self,message):65 #在内部访问类的私有方法:66 self.__printaddhandler('info',message)67 68 def warning(self,message):69 #在内部访问类的私有方法:70 self.__printaddhandler('warning',message)71 72 def error(self,message):73 #在内部访问类的私有方法:74 self.__printaddhandler('error',message)75 76 def critical(self,message):77 #在内部访问类的私有方法:78 self.__printaddhandler('critical',message)79 80 if __name__ =='__main__':81 82 l=CreateLog()83 # l.info('info')84 # l.debug('debug')85 l.warning('warning')86 l.error('error')87 l.critical('critical')
将封装好的类,灵活运用在自动化用例当中。
阅读全文
0 0
- Logging模块学习记录
- python logging模块学习记录
- Python模块学习 ---- logging 日志记录
- Python模块学习 ---- logging 日志记录
- Python模块学习 ---- logging 日志记录
- Python模块学习:logging 日志记录
- Python模块学习:logging 日志记录
- Python模块学习:logging 日志记录
- Python模块学习 ---- logging 日志记录(一)
- Python模块学习 ---- logging 日志记录(一)
- Python模块学习 ---- logging 日志记录(一)
- Python模块学习 ---- logging 日志记录(一)
- Python模块学习 ---- logging 日志记录(一)
- Python模块学习 ---- logging 日志记录(一)
- python logging模块学习
- python logging模块学习
- Logging 模块学习
- python logging模块学习
- ARM指令adr adrl ldr mov简单科普
- 关于数据类型的判断不使用typeof的精确定位
- 如何使用ArcMap将.mxd文件发布成.sd文件
- 二进制中1的个数
- maven-dependency-plugin (goals "copy-dependencies","unpack") is not supported by m2e
- Logging模块学习记录
- 步进电机产生偏位现象的原因和解决方法
- Android EventBus使用
- java "lambda expressions not supported at this language level"
- 修改db_files后遇ORA-01105 ORA-01174 解决
- django project 搭建
- 5-8 古风排版 (20分)
- WebRTC实时通信系列教程9 数据通道图片传输
- 求助,贪吃蛇去除不了蛇残留