python关于logging日志模块应用

python的logging模块能很好的帮我们完成程序的日志功能,他的配置其实类似我们用java的log4j配置。下面简单说明下,实际应用中logging配置的使用。

有同学会说,logging这么麻烦,我直接用print就好啦,套用大老师的话,这很low....

进入正题,先什么都不说,上配置logging.conf:

# 文件名 logging.conf
[loggers]
keys=root,myAutoTest

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=myFormatter

[logger_root]
level=DEBUG
handlers=fileHandler


[logger_myAutoTest]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=myAutoTest
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
formatter=myFormatter
encoding=utf-8

[handler_fileHandler]
class=FileHandler
args=('./logs/my_auto_test.log','a','utf-8')
formatter=myFormatter

[formatter_myFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

上面的配置文件中:由[loggers],[handlers],[formaters] 信息组成,keys对应实例化是他们的名称,多个用逗号隔开。

然后再分别配置各个logger,handler,formaters。以logger为例,logger下有root和myAutoTest两个logger,

就要配置[logger_root]和[logger_myAutoTest];类似的,handler和formater也是这样。

 

在[logger_name] 中的参数purlname ,是设置logging.getLoger(name)中的name值;

propagete参数 :propagete=0,表示输出日志,但消息不传递;propagate=1是输出日志,同时消息往更高级别的地方传递。

若上面配置文件参数progagate=1,myAutoTest的更高级logger有root,输出的结果会是:

2019-03-15 22:48:01 - myAutoTest - DEBUG - debug  
2019-03-15 22:48:01 - myAutoTest - DEBUG - debug  
2019-03-15 22:48:01 - myAutoTest - INFO - info  
2019-03-15 22:48:01 - myAutoTest - INFO - info  
2019-03-15 22:48:01 - myAutoTest - WARNING - warning  
2019-03-15 22:48:01 - myAutoTest - WARNING - warning  
2019-03-15 22:48:01 - myAutoTest - ERROR - error  
2019-03-15 22:48:01 - myAutoTest - ERROR - error  
2019-03-15 22:48:01 - myAutoTest - CRITICAL - critiacl  
2019-03-15 22:48:01 - myAutoTest - CRITICAL - critiacl 

像其它的语言那样,python里的logging信息同样也是分为5个等级,分别是:DEBUG,INFO,WARNING,ERROR,CRITICAL

下面是应用说明:

DEBUG:面向功能开发人员,一般在功能开发阶段使用,用来给开发人员检查功能是否正常的。 
此类日志只在开发阶段使用,线上系统不开此级别日志。

INFO:内测版可输出此日志,用来查看新开发特性或者 bug fix 是否正常。 一般线上系统不开此级别日志。

WARN:不会对系统造成影响的非正常流程。 线上系统不开此级别日志。
ERROR:会对系统造成影响的非正常流程,可自我修复,不影响系统稳定性。 线上系统不开此级别日志。
CRITICAL:产生了不可逆的错误,系统无法正常工作。线上系统不开此级别日志。

日志虽有千般好,但是切记:日志只可记录系统运行状态,不可输出用户敏感数据。否则就会被祭天。

 

python中,logging由logger,handler,filter,formater四个部分组成:

logger是提供我们记录日志的方法;

handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler;

filter是给用户提供更加细粒度的控制日志的输出内容;

formater用户格式化输出日志的信息。

 

logger的级别划分,python中, root是默认的最高级别的,其它的logger的级别通过"."来划分等级,如:father,father.son1,father.son2三个logger,father.son1,father.son2都的级别都低于father,依此类推。

日志文件调用

import logging.config
import logging
import os

def get_logger(name='myAutoTest'):
    # 获取配置文件路径
    conf_log = os.path.join(os.path.dirname(os.path.abspath(__file__)), "logging.conf")
    # 使用getLogger加载配置文件
    logging.config.fileConfig(conf_log)
    # 获取logger对象
    logger = logging.getLogger(name)
    return logger

日志应用场景

from selenium.webdriver.common.by import By

class Test():
    driver = BrowserEngine.init_local_driver()
    logger = logging_setting.get_logger()


    def my_test(self):
        self.logger.info("目标电脑列表页------出发!!!!!!!!!")
        goods_list_page = GoodsListPage(self.driver)
        goods_list_page.get_goods_list_driver("电脑","笔记本")


        brand_locator = (By.ID, "brand-11518")
        price_locator = (By.LINK_TEXT, "7000以上")
        commnet_locator = (By.LINK_TEXT, "评论数")

        goods_list_page.get_selector_page([brand_locator, price_locator, commnet_locator])
        self.logger.info("到达筛选后的页面")
        goods = (By.XPATH, "//*[@id=\"plist\"]/ul/li[1]/div/div[1]/a/img")

        driver = goods_list_page.get_goods_info_page(goods)
        self.logger.info("当前url地址是:" + driver.current_url)

        goods_info = GoodsInfoPage(driver)
        goods_info.save_product_info()
        self.logger.info("保存商品信息成功")


t = Test()
t.my_test()

执行代码后,在指定的路径my_auto_test.log 有日志写入

2019-03-15 22:48:01 - myAutoTest - INFO - 目标电脑列表页------出发!!!!!!!!!
2019-03-15 22:48:10 - myAutoTest - INFO - 到达筛选后的页面
2019-03-15 22:48:12 - myAutoTest - INFO - 当前url地址是:https://item.jd.com/6535936.html
2019-03-15 22:48:15 - myAutoTest - INFO - 保存商品信息成功

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值