Python的logging,记录log的包

最近在做自动化测试时,想给他加上日志,所以用到logging的模块,以下是python增加log的几种方式
一、python代码配置方式(当然还有一种是可以多模块通用的一个python代码设置,这个网上有很多例子,就不在这里赘述了)

import logging
import logging.handlers

#LOG_FILE 是要输出的日志的文件地址
LOG_FILE=r"C:Usersmin.sunDesktop自动化测试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=DEBUG
handlers=hand01,hand02

[logger_example01]
handlers=hand03
qualname=example01
propagate=0

[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0

[logger_performtest]
handlers=hand03
qualname=performtest
propagate=0
###############################################
[formatters]
keys=form01,form02

[formatter_form01]
format=%(asctime)s - [%(filename)s:%(lineno)s] - %(levelname)s - %(message)s
datefmt=

[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S

###############################################

[handlers]
keys=hand01,hand02,hand03

[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)

[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
#要存储log的文件地址
args=(r"C:Usersmin.sunDesktop estlog.txt", 'a')

[handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form01
args=(r"C:Usersmin.sunDesktop estlog.txt", 'a',10*1024*1024, 5)

(说明:重点注意一下handler中的class,logging提供了多种Handler,不同的代表了不同的日志存储方式,具体内容可以见我下图给出的参考)
 
模块中调用的方法:
import logging
import logging.config
logging.config.fileConfig(r"C:Usersmin.sunDesktopautotestcomlog.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格式编码。配置文件也更改为这个格式或者GBK格式。


参考文章:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html
原文地址:https://www.cnblogs.com/meitian/p/4814779.html