010、日志模块(三)、用config.ini配置文件,配置自定义 logging

 

一、ConfigParse 类

   

   

  ConfigParse 类还有 其他的操作,自动化测试中用的少。

 

  1、用 config.ini 配置文件 + logging 实现搜集日志

    a、项目目录如下:

  b、config.ini 文件代码如下:

# 定义日志相关的配置
# log、name、level、file 都是自定义的 ;
[log]
name=logging_Demo
level=DEBUG
file=demo_log.log
show_stream_handler=True

# 定义数据库相关的配置
# host、port 都是自定义的 ;
[mysql]
host=127.0.0.1
port=8080
View Code

  c、my_logger.py 代码如下:

# -*- coding:utf-8 -*-
# Author:  Sky
# Email:   2780619724@qq.com
# Time:    2021/8/3 11:13
# Module:  my_logger.py


# 自定义一个日志模块
import logging
from logging import Logger

# 导入 ConfigParser 类 ,用来操作 config.ini 文件 ;
from configparser import ConfigParser


class MyLogger(Logger):

    def __init__(self):
        # 0、用 ConfigParser类 来操作 config.ini 配置文件 ;
        # 实例化一个 ConfigParser ;
        conf = ConfigParser()
        # 读取配置文件,当前目录下的 config.ini 文件 ;
        conf.read('config.ini', encoding='utf-8')
        logger_name = conf.get('log', 'name')
        level = conf.get('log', 'level')
        file = conf.get('log', 'file')
        show_stream_handler = conf.get('log', 'show_stream_handler')

        # 1、设置自定义日志搜集器名字、设置日志级别;
        super().__init__(logger_name, level)

        # 2、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
        fmt = '%(asctime)s, %(levelname)s %(pathname)s,line=%(lineno)d, %(message)s, %(name)s'
        formatter = logging.Formatter(fmt)

        # 3、日志默认输出到控制台,如果设置为False,日志将不输出到控制台;
        if show_stream_handler:
            stream_handler = logging.StreamHandler()
            # 设置渠道当中的日志格式
            stream_handler.setFormatter(formatter)
            # 将渠道与实例日志搜集器绑定
            self.addHandler(stream_handler)

        # 4、把日志输出到文件file
        if file:
            file_handle = logging.FileHandler(file, mode='a', encoding='utf-8')
            # 设置渠道当中的日志格式
            file_handle.setFormatter(formatter)
            # 将渠道与实例日志搜集器绑定
            self.addHandler(file_handle)


# 生成一个 mylogger 实例,在其他所有模块中导入该模块时,共用这一个日志搜集实例。mylogger 类似于 全局变量
# 日志搜集是典型的单列设计模式 (单实例模式) 。
mylogger = MyLogger()
View Code

 

 测试代码:

 d、test_logger_cat.py 代码如下:

# 导入 my_logger 模块中 mylogger 实例;
from my_logger import mylogger


class Cat():

    def __init__(self, name):
        self.name = name

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        mylogger.debug('debug日志111')
        mylogger.info('info日志222')
        mylogger.error('error日志333')

    # 把异常信息输出到 logging 中 ;
    # Exception as e  再打印 ;
    def test_raise(self):
        try:
            if str(123) + 12:
                mylogger.info('成功')
        except Exception as e:
                mylogger.error('异常信息为:{}'.format(e))


if __name__ == '__main__':
    c = Cat('加菲')
    c.func()
    c.test_raise()
View Code

  e、test_logger_dog.py 代码如下:

# 导入 my_logger 模块中 mylogger 实例;
from my_logger import mylogger


class Dog():

    def __init__(self, name):
        self.name = name

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        mylogger.debug('debug日志444')
        mylogger.info('info日志555')
        mylogger.error('error日志666')


if __name__ == '__main__':
    d = Dog('哈士奇')
    d.func()
View Code

  f、test_cat_dog.py 代码如下:

from test_logger_cat import Cat
from test_logger_dog import Dog

c = Cat('加菲')
c.func()

d = Dog('哈士奇')
d.func()
View Code

 

  在 test_cat_dog.py 中 run 的 测试结果 如下:

    1、demo_log.log 中生成的结果如下:

2021-08-03 18:02:53,988, DEBUG D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_cat.py,line=12, debug日志111, logging_Demo
2021-08-03 18:02:53,988, INFO D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_cat.py,line=13, info日志222, logging_Demo
2021-08-03 18:02:53,988, ERROR D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_cat.py,line=14, error日志333, logging_Demo
2021-08-03 18:02:53,988, DEBUG D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_dog.py,line=12, debug日志444, logging_Demo
2021-08-03 18:02:53,988, INFO D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_dog.py,line=13, info日志555, logging_Demo
2021-08-03 18:02:53,988, ERROR D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_dog.py,line=14, error日志666, logging_Demo
View Code

    2、控制台的输出结果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/study/test_cat_dog.py
2021-08-03 18:02:53,988, DEBUG D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_cat.py,line=12, debug日志111, logging_Demo
2021-08-03 18:02:53,988, INFO D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_cat.py,line=13, info日志222, logging_Demo
2021-08-03 18:02:53,988, ERROR D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_cat.py,line=14, error日志333, logging_Demo
2021-08-03 18:02:53,988, DEBUG D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_dog.py,line=12, debug日志444, logging_Demo
2021-08-03 18:02:53,988, INFO D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_dog.py,line=13, info日志555, logging_Demo
2021-08-03 18:02:53,988, ERROR D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\study\test_logger_dog.py,line=14, error日志666, logging_Demo
我的名字是: 加菲
我的名字是: 哈士奇

Process finished with exit code 0
View Code

 

posted @ 2021-08-03 18:07  空-山-新-雨  阅读(260)  评论(0)    收藏  举报