python程序调试与测试使用JSON文件进行日志配置
2018-07-04 11:56
423 查看
概述
- 在的的Python代码中硬编码的日志记录的配置是很不灵活,也不便于管理的;
- 记录配置的最好的方法是使用一个配置文件来管理;
- Python 2.7及以后可以从字典中加载日志配置,也就意味着可以通过读取JSON文件来加载日志的配置;
配置文件范本
下面是一个JSON文件存储日志配置的范本,我们可以以此为蓝本,来修改不同记录对象的日志格式,文件存储位置,备份文件和存储上限,输出处理器等信息:(PS:这里注意使用时要删除中文注释,否则就不是一个标准的JSON文件)
[code]{ "version": 1, "disable_existing_loggers": false, // 日志格式 "formatters": { "simple": { "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s" } }, "handlers": { // 定义控制台日志的级别和样式 "console": { "class": "logging.StreamHandler", "level": "DEBUG", "formatter": "simple", "stream": "ext://sys.stdout" }, // 定义INFO(以上)级别的日志处理器 "info_file_handler": { "class": "logging.handlers.RotatingFileHandler", "level": "INFO", "formatter": "simple", "filename": "./logs/info.log", "maxBytes": 10485760, "backupCount": 20, "encoding": "utf8" }, // 定义ERROR以上)级别的日志处理器 "error_file_handler": { "class": "logging.handlers.RotatingFileHandler", "level": "ERROR", "formatter": "simple", "filename": "./logs/errors.log", "maxBytes": 10485760, "backupCount": 20, "encoding": "utf8" } }, // 定义不同name的logger的日志配置 "loggers": { "mymodule": { "level": "ERROR", "handlers": [ "info_file_handler" ], "propagate": "no" } }, // 定义全局日志配置 "root": { "level": "INFO", "handlers": [ "console", "info_file_handler", "error_file_handler" ] } }
读取JSON文件,加载全局日志配置
[code]# 加载全局logging配置 # default_path 默认的JSON配置文件路径 # default_level 默认的日志级别 # env_key 通过读取系统环境变量来存储JSON配置文件的路径,名称是自定义的,前提是我们已经手动配置过这个环境变量 def setup_logging(default_path="logging.json", default_level=logging.INFO, env_key="LOG_CFG"): path = default_path # 尝试从环境变量读取日志配置 value = os.getenv(env_key, None) if value: path = value print("从环境变量中获取到配置地址:",value) else: print("没有从环境变量中获取到配置地址") # 从json文件中加载日志配置 if os.path.exists(path): with open(path, "r") as f: # 读取json文件为字典 config = json.load(f) print(type(config))#<class 'dict'> # 使用字典进行全局日志配置 logging.config.dictConfig(config) else: # 没有读到配置文件时胡乱配置一个 logging.basicConfig(level=default_level)
[code]# 读取json文件并进行全局日志配置 setup_logging(default_path="./configs/logging.json")
输出记录日志
[code]logging.info("start func") logging.info("exec func") logging.info("end func") logging.error("shit! a damn error occured!")
对照配置文件的相关片段:
[code] "root": { "level": "INFO", "handlers": [ "console", "info_file_handler", "error_file_handler" ] }
实际的执行效果也是完全一致的:INFO及以上级别的日志被同时输出到文件和控制台,INFO以上级别的日志保存在./logs/info.log中,ERROR以上级别的日志保存在./logs /errors.log中,输出格式均为“%(asctime)s - %(name)s - %(levelname)s - %(message)s”:
输出记录日志
我们导入一个子模块,这个子模块中的记录对象以他妈的命名,令其进行一些输出:
[code]import mymodule mymodule.doSomeLog()
MyModule中的模块代码如下:
[code]import logging # logging.warning("!!!away from my wife,this is a warning!!!") logger = logging.getLogger("fuck") def doSomeLog(): logger.info("!!!mymodule init ok!!!") logger.error("!!!mymodule a fucking error occured!!!")
查阅配置文件中的相关片段,我们知道名为他妈的的记录对象,会输出错误级别的日志到./logs/info.log中
[code] "loggers": { "fuck": { "level": "ERROR", "handlers": [ "info_file_handler" ], "propagate": "no" } },
实际的执行效果也是完全一致的,信息级别的日志并没有被写入文件中,控制台也没有输出;
版权声明:本文为博主原创文章,未经博主允许不得转载.https://my.csdn.net/pangzhaowen
阅读更多相关文章推荐
- 14.8Python程序调试与测试(8):使用JSON文件进行日志配置
- 使用Python对json文件进行处理
- 使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
- 14.7Python程序调试与测试(7):日志配置的继承
- python 日志模块(不使用配置文件)
- VS中调用DLL进行测试;vs进行远程调试;python中进行debug调试需要的文件
- python使用logging进行日志配置
- Python 02 解析配置文件和日志库的使用
- Python3 使用配置文件创建日志
- python对运行程序进行日志文件记录
- 使用 logrotate对centos中各服务程序的日志文件进行转储
- Python logging模块使用配置文件记录日志
- python程序如何在生产和测试环境自动调用对应的配置文件
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 如何使用svconfigeditor.exe编辑WCF Service配置文件--配置Diagnostics进行WCF Service的log和Trace(三)
- 使用python的ConfigParser模块方便的读取配置文件
- 使用NUnit进行DotNet程序测试
- 如何使用HttpUnit进行上传文件测试
- 大型Java项目中使用maven进行管理,pom.xml文件中build的配置