热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

 一、ConfigParse类    ConfigParse类还有其他的操作,自动化测试中用的少。 1、用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

 


原文链接:https://www.cnblogs.com/qq-2780619724/p/15095519.html



推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
author-avatar
Android源代码
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有