介绍
这篇文章主要为大家展示了python如何将日志记录模块封装成单独模块并实现动态切换层,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
1。将日志记录模块的初始化,配置,设置等代码封装到一个模块中,
2。能根据配置切换日志记录。水平,网上给出的教程都是写死的,如果我在线上之前使用了logging.info(味精),现在想切换为logging.debug(味精)怎么办?需要能够根据配置文件中的设置配置日志记录。水平
两个文件:
logging_class:将日志记录模块的初始化,配置,设置等代码封装到一此模块中,读取配置文件中对于日志等级的设置项,需要使用日志功能的模块进口这个模块
applogconfig。ini:配置文件
logging_class:
进口记录 导入系统 进口ConfigParser def log_building (log_file): 试一试: #设置格式 format_str=logging.Formatter (“% (asctime) %(文件名)年代(线:% (lineno) d) % (levelname) %(消息)s") #创建机架输出处理程序 crit_hand=logging.StreamHandler (sys.stderr) crit_hand.setFormatter (format_str) #创建文件处理程序 file_hand=logging.FileHandler (log_file & # 39;一个# 39;) file_hand.setFormatter (format_str) app_log=logging.getLogger (__name__) app_log.addHandler (crit_hand) app_log.addHandler (file_hand) #必须设置,否则无法输出 app_log.setLevel (logging.NOTSET) 返回app_log 除了例外e: logging.shutdown () e def config_file_get (fpath): 试一试: cnf_dict={} cfg=ConfigParser.SafeConfigParser () cfg.read (fpath) 对部分cfg.sections (): #将ini中项的组合到字典中,关键=节+ _option 在cfg.items项目(部分): 关键=节+ & # 39;_ # 39;+项目[0] 值=https://www.yisu.com/zixun/item [1] 如果cnf_dict.get(关键,)==没有: cnf_dict[主要]=价值 返回cnf_dict 除了例外e: e def log_level_get(水平): DEBUG_LEVEL={“关键”:logging.CRITICAL,“错误”:logging.ERROR,“警告”:logging.WARNING, “信息”:“调试”:logging.DEBUG logging.INFO } 试一试: 返回DEBUG_LEVEL.get (level.upper ()) 除了例外e: e
applogconfig。ini内容:
(日志) log_level=错误 dir=日志
以下为unittest内容:
进口unittest 进口logging_class 进口操作系统 导入日志 类测试(unittest.TestCase): cfg={} def设置(自我): 打印& # 39;测试开始# 39; self.cfg={} def拆卸(自我): 打印& # 39;测试结束# 39; def testlog_level_get(自我): currentWorkingPath=" # 39; E: \ python Myworkspace \ \ logging_module \ logging_module& # 39; ini_file=os.path.normpath (os.path.abspath (os.path.join (currentWorkingPath & # 39; applogconfig.ini& # 39;))) self.cfg=logging_class.config_file_get (ini_file) self.assertEqual (self.cfg [& # 39; log_log_level& # 39;] .upper() & # 39;错误# 39;,& # 39;好吧,) def testlog_level_set(自我): currentWorkingPath=" # 39; E: \ python Myworkspace \ \ logging_module \ logging_module& # 39; ini_file=os.path.normpath (os.path.abspath (os.path.join (currentWorkingPath & # 39; applogconfig.ini& # 39;))) self.cfg=logging_class.config_file_get (ini_file) #打印self.cfg [& # 39; log_log_level& # 39;】 self.assertEqual (logging_class.log_level_get (self.cfg [& # 39; log_log_level& # 39;]),日志记录。错误,& # 39;好吧,) def testlog_building(自我): currentWorkingPath=" # 39; E: \ python Myworkspace \ \ logging_module \ logging_module& # 39; ini_file=os.path.normpath (os.path.abspath (os.path.join (currentWorkingPath & # 39; applogconfig.ini& # 39;))) log_file=os.path.normpath (os.path.abspath (os.path.join (currentWorkingPath & # 39; b.log& # 39;))) self.cfg=logging_class.config_file_get (ini_file) #打印self.cfg [& # 39; log_log_level& # 39;】 水平=logging_class.log_level_get (self.cfg [& # 39; log_log_level& # 39;]) 日志=logging_class.log_building (log_file) 日志。日志(水平,& # 39;dddds& # 39;) log.debug(& # 39;味精# 39;) if __name__==癬_main__": #导入系统,系统。argv=[& # 39; & # 39; & # 39; Test.testName& # 39;】 unittest.main ()
输出: