『无为则无心』Python日志 — 68、logging日志模块的封装
2022/3/6 17:15:19
本文主要是介绍『无为则无心』Python日志 — 68、logging日志模块的封装,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 1、日志模块封装
- 2、日志模块的调用
1、日志模块封装
首先我们把之前学过的代码语句封装到模块的方法中。
可以把该模块封装到commo
目录中。
""" 简单封装log方法 我们之后也可以把一些常量提取的配置文件中。 自己网上去学习。 """ import os import time import logging.handlers # 日志打印等级 LEVELS = { 'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARNING, 'error': logging.ERROR, 'critical': logging.CRITICAL } # 创建一个日志 logger = logging.getLogger() level = 'default' # 创建日志文件方法 def create_file(filename): path = filename[0:filename.rfind('/')] if not os.path.isdir(path): os.makedirs(path) if not os.path.isfile(filename): fd = open(filename, mode='w', encoding='utf-8') fd.close() else: pass # 给logger添加handler 添加内容到日志处理器中 def set_handler(levels): if levels == 'error': logger.addHandler(MyLog.err_handler) logger.addHandler(MyLog.handler) # 在记录日志之后移除日志处理器 def remove_handler(levels): if levels == 'error': logger.removeHandler(MyLog.err_handler) logger.removeHandler(MyLog.handler) # 获取当前时间 def get_current_time(): return time.strftime(MyLog.date, time.localtime(time.time())) # 封装框架的log模块 class MyLog: # 把日志输入到log目录中 path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) log_file = path + '/Log/log.log' err_file = path + '/Log/err.log' logger.setLevel(LEVELS.get(level, logging.NOTSET)) create_file(log_file) create_file(err_file) date = '%Y-%m-%d %H:%M:%S' # 创建一个handler,用于写入日志文件 handler = logging.FileHandler(log_file, encoding='utf-8') err_handler = logging.FileHandler(err_file, encoding='utf-8') @staticmethod def debug(log_meg): set_handler('debug') # 文件中输出模式 logger.debug("[DEBUG " + get_current_time() + "]" + log_meg) remove_handler('debug') @staticmethod def info(log_meg): set_handler('info') logger.info("[INFO " + get_current_time() + "]" + log_meg) remove_handler('info') @staticmethod def warning(log_meg): set_handler('warning') logger.warning("[WARNING " + get_current_time() + "]" + log_meg) remove_handler('warning') @staticmethod def error(log_meg): set_handler('error') logger.error("[ERROR " + get_current_time() + "]" + log_meg) remove_handler('error') @staticmethod def critical(log_meg): set_handler('critical') logger.error("[CRITICAL " + get_current_time() + "]" + log_meg) remove_handler('critical') # 设置控制台输出格式 formatter = logging.Formatter( '[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S') # 再创建一个handler,用于输出到控制台 console = logging.StreamHandler() console.setFormatter(formatter) logger.addHandler(console) console.setLevel(logging.NOTSET) if __name__ == "__main__": MyLog.debug("This is debug message") MyLog.info("This is info message") MyLog.warning("This is warning message") MyLog.error("This is error") MyLog.critical("This is critical message")
运行结果如下:
[2021-01-16 22:41:53] [DEBUG] [DEBUG 2021-01-16 22:41:53]This is debug message [2021-01-16 22:41:53] [INFO] [INFO 2021-01-16 22:41:53]This is info message [2021-01-16 22:41:53] [WARNING] [WARNING 2021-01-16 22:41:53]This is warning message [2021-01-16 22:41:53] [ERROR] [ERROR 2021-01-16 22:41:53]This is error [2021-01-16 22:41:53] [ERROR] [CRITICAL 2021-01-16 22:41:53]This is critical message
2、日志模块的调用
我们在写测试用例的时候,也就是在script
目录编写测试用例。
使用下面的方式进行日志模块的调用。
""" 测试新增学院接口 """ # 测试用例是在unittest框架下编写 import unittest from interface.add_departments import Add_department # 导入新增学院接口 from common.getKeyword_forResult import GetKeyword # 返回值处理接口 from common.common_log import MyLog # 测试添加和查询学院的关联型接口 class Test_Add_Dep(unittest.TestCase): def setUp(self) -> None: self.url = "http://127.0.0.1:8000/api/departments/" # 实例化Add_department self.add_dep = Add_department(self.url) # 测试添加学院完整性实现 def test_add_dep(self): """ 测试添加学院接口 :return: """ # 封装请求参数 data = { "data": [ { "dep_id": "T101", "dep_name": "Test学院", "master_name": "Test-Master", "slogan": "Here is Slogan" } ] } try: # 新增学院 response = self.add_dep.add_dep(data) if GetKeyword.get_keyword(response["already_exist"], "count") == 0: # 获取添加成功后的dep.id res_dep_id = GetKeyword.get_keyword(response["create_success"], "dep_id") # 1.输出添加学院成功日志信息 MyLog.info("添加学院成功!") else: res_dep_id = GetKeyword.get_keyword(response["already_exist"], "dep_id") # 2.输出添加学院已存在日志信息 MyLog.info("您添加的学院已存在!") except Exception as error: # 3.输出添加学院错误日志信息 MyLog.error("添加学院参数错误!") expect = "T101" self.assertEqual(res_dep_id, expect) if __name__ == '__main__': unittest.main()
说明:
我们通过简单的例子,来模拟日志模块如何封装,在用例中如何使用。
但是在实际的工作做会比上面复杂的多,
所以在这里我们知道日志模块如何定义,如何使用就可以了。
这篇关于『无为则无心』Python日志 — 68、logging日志模块的封装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门