最近在做自动化测试时,想给他加上日志,所以用到logging的模块,以下是python增加log的几种方式
一、python代码配置方式(当然还有一种是可以多模块通用的一个python代码设置,这个网上有很多例子,就不在这里赘述了)
import logging
import logging.handlers
#LOG_FILE 是要输出的日志的文件地址
LOG_FILE=r"C:\Users\min.sun\Desktop\自动化测试\log.txt"
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5)
fmt = "%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s"
formatter = logging.Formatter(fmt)
handler.setFormatter(formatter)
logger = logging.getLogger(‘tst‘)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info(‘first info message‘)
logger.debug(‘first debug message‘)
try:
1/0
except Exception as e:
logger.debug(e)
print(e)
说明:log里可以包含变量,用法如下,是将name变量中的内容替换到%s上。不仅是info,其他级别的也是这么用
logger.info("这是一个变量 %s ",name)
二、使用配置文件
使用配置文件可以更灵活,更方便,下面是配置文件的一些使用方法
配置文件:
[loggers]keys=root,example01,example02,performtest [logger_root]level=DEBUGhandlers=hand01,hand02 [logger_example01]handlers=hand03qualname=example01propagate=0 [logger_example02]handlers=hand01,hand03qualname=example02propagate=0 [logger_performtest]handlers=hand03qualname=performtestpropagate=0###############################################[formatters]keys=form01,form02 [formatter_form01]format=%(asctime)s - [%(filename)s:%(lineno)s] - %(levelname)s - %(message)sdatefmt= [formatter_form02]format=%(name)-12s: %(levelname)-8s %(message)sdatefmt=%a, %d %b %Y %H:%M:%S ############################################### [handlers]keys=hand01,hand02,hand03 [handler_hand01]class=StreamHandlerlevel=INFOformatter=form02args=(sys.stderr,) [handler_hand02]class=FileHandlerlevel=DEBUGformatter=form01
#要存储log的文件地址args=(r"C:\Users\min.sun\Desktop\testlog.txt", ‘a‘) [handler_hand03]class=handlers.RotatingFileHandlerlevel=INFOformatter=form01args=(r"C:\Users\min.sun\Desktop\testlog.txt", ‘a‘,10*1024*1024, 5)
(说明:重点注意一下handler中的class,logging提供了多种Handler,不同的代表了不同的日志存储方式,具体内容可以见我下图给出的参考)
模块中调用的方法:
import loggingimport logging.configlogging.config.fileConfig(r"C:\Users\min.sun\Desktop\autotest\com\log.conf")logger = logging.getLogger("example01") logger.debug("debug message")logger.info("info message") logger.warn("warn message") logger.error("error message") logger.critical("critical message"
说明:在用logging的过程中遇到了编码的问题,一个是配置文件中的存储log的文件路径中包含中文,但是执行时提示GBK的不能读取;一个是存储的log包含中文,结果存储到日志文件中后乱码。
解决方法:将log文件更改编码为UTF8无BOM格式编码。配置文件也更改为这个格式(但是有时候可以,有时候不可以,所以这个需要进一步的了解) 参考文章:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html