python如何将日志记录模块封装成单独模块并实现动态切换

  介绍

这篇文章主要为大家展示了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 () 

输出:

python如何将日志记录模块封装成单独模块并实现动态切换