Python的logger怎么配置

技术Python的logger怎么配置这篇文章主要介绍“Python的logger怎么配置”,在日常操作中,相信很多人在Python的logger怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

本文主要介绍“如何配置Python的记录器”。在日常操作中,相信很多人对于如何配置Python的logger都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“如何配置Python的logger”的疑惑!接下来,请和边肖一起学习!
如何考虑传递的数据结构(对调用者是否有先验知识要求,比如返回一个tuple,用户需要知道Tuple中元素的顺序,所以情况是否要封装;),数据结构定义清晰,很多东西都很清晰。
如何操作数据库(可以学习sqlalchemy,包括核心和orm APIs)
如何处理异常(异常应该单独捕获。你可以清楚地知道它是在什么情况下引起的。出现异常后,您应该打印日志来解释发生了什么。如果情况不好,需要再次抛出异常或者报警)。
检查(a)所有获得资源的地方都要做(a .没有得到会议怎么办;b .遇到异常怎么办)
所有操作资源的地方都要检查操作是否成功。
每个函数都要短,如果函数太长就要拆分(有一个建议值,函数中的行数应该在20到30行之间,按照这个规范做一次真的很好)。
在使用类之后,考虑重构__str__函数,以便用户可以打印出来(如果_ _ str __没有实现,将调用__repr_)。如果对象放在集合中,则需要实现__repr__函数,该函数用于打印整个集合并可视化显示。
如果有些资源会发生变化,可以单独提取出来做成函数,这样后续的调用就不会发生变化。
附上Python2.7代码的副本(一些私密的东西被修改了)
#-*-coding : utf-8-*-from sqlalchemyimportcreate _ engineimportlogging from logging . configimportfilecomportrequestsimportclinet #私有模块文件配置(' logging _ config.ini ')日志记录程序=logging . getlogger(' killdduplicatejob ')#配置可以单独放入一个模块DB_USER='xxxxx

xx'DB_PASSWORD='

ted jobs")  (running_apps, app_name_to_user) = get_all_running_jobs()  all_apps_on_yarn = get_apps_from_yarn_with_queue(get_resource_queue())   duplicated_jobs = []  for app in all_apps_on_yarn:  (app_id, app_name) = app   if app_id not in running_apps:  if not app_name.startswith("test"):  logger.info("find a duplicated job, prefixed_name[%s] with appid[%s]" % (app_name, app_id))  user = app_name_to_user[app_name]  duplicated_jobs.append(DuplicatedJobs(app_id, app_name, user))  else:  logger.info("Job[%s] is a test job, would not kill it" % app_name)   logger.info("Find duplicated jobs [%s]" % duplicated_jobs)   return duplicated_jobs   def get_apps_from_yarn_with_queue(queue):  param = {"queue": queue}  r = requests.get(REST_API_URL, params=param)  apps_on_yarn = []  try:  jobs = r.json().get("apps")  app_list = jobs.get("app", [])  for app in app_list:  app_id = app.get("id")  name = app.get("name")  apps_on_yarn.append((app_id, name))   except Exception as e: #Exception ***进行单独的分开,针对每一种 Exception 进行不同的处理  logger.error("Get apps from Yarn Error, message[%s]" % e.message)   logger.info("Fetch all apps from Yarn [%s]" % apps_on_yarn)   return apps_on_yarn   def get_all_running_jobs():  job_infos = get_result_from_mysql("select * from xxxx where xx=yy")   app_ids = []  app_name_to_user = {}  for (topology_id, topology_name) in job_infos:  status_set = get_result_from_mysql("select * from xxxx where xx=yy")  application_id = status_set[0][0]  if "" != application_id:  configed_resource_queue = get_result_from_mysql(  "select * from xxxx where xx=yy")  app_ids.append(application_id)  app_name_to_user[topology_name] = configed_resource_queue[0][0].split(".")[1]   logger.info("All running jobs appids[%s] topology_name2user[%s]" % (app_ids, app_name_to_user))  return app_ids, app_name_to_user   def kill_duplicated_jobs(duplicated_jobs):  for job in duplicated_jobs:  app_id = job.app_id  app_name = job.app_name  user = job.user  logger.info("try to kill job[%s] with appid[%s] for user[%s]" % (app_name, app_id, user))  try:  Client.kill_job(app_id, user)  logger.info("Job[%s] with appid[%s] for user[%s] has been killed" % (app_name, app_id, user))  except Exception as e:  logger.error("Can't kill job[%s] with appid[%s] for user[%s]" % (app_name, app_id, user))   def get_result_from_mysql(sql):  a = engine.execute(sql)  return a.fetchall()   # 因为下面的资源可能发生变化,而且可能包含一些具体的逻辑,因此单独抽取出来,独立成一个函数 def get_resource_queue():  return "xxxxxxxxxxxxx"   if __name__ == "__main__":  kill_duplicated_jobs(find_duplicated_jobs())

其中 logger 配置文件如下(对于 Python 的 logger,官方文档写的非常好,建议读一次,并且实践一次)

[loggers] keys=root, simpleLogger   [handlers] keys=consoleHandler, logger_handler   [formatters] keys=formatter   [logger_root] level=WARN handlers=consoleHandler   [logger_simpleLogger] level=INFO handlers=logger_handler propagate=0 qualname=killduplicatedjob   [handler_consoleHandler] class=StreamHandler level=WARN formatter=formatter args=(sys.stdout,)   [handler_logger_handler] class=logging.handlers.RotatingFileHandler level=INFO formatter=formatter args=("kill_duplicated_streaming.log", "a", 52428800, 3,)   [formatter_formatter] format=%(asctime)s %(name)-12s %(levelname)-5s %(message)s

到此,关于“Python的logger怎么配置”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/128963.html

(0)

相关推荐

  • 亲核取代反应,二甲基胺与氯丙烯亲核取代

    技术亲核取代反应,二甲基胺与氯丙烯亲核取代二甲胺与氯丙烯在氢氧化钠的存在下反应得到二甲基二烯丙基氯化铵(简称DMDAAC),总的反应方程式如下亲核取代反应:2CH2=CHCH2Cl+2(CH3)2NH+NaOH→(CH2

    生活 2021年10月21日
  • pl什么意思,JM们,我到底PL了没啊?

    技术pl什么意思,JM们,我到底PL了没啊?我10月份做的造影,当时是备孕十一个月都没有好孕,去医院做了所有检查,除了造影,以前听说造影痛苦一直不敢做,医生也不建议我做,说是备孕时间短,后来等所有检查结果出来一切都没问题

    生活 2021年10月27日
  • vue中怎么使用vue-cropper裁剪图片

    技术vue中怎么使用vue-cropper裁剪图片这篇文章主要讲解了“vue中怎么使用vue-cropper裁剪图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中

    攻略 2021年11月24日
  • selenium测试过程动了键盘(selenium判断点击事件是否成功)

    技术selenium中键盘事件的示例分析这篇文章主要介绍了selenium中键盘事件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。例:from

    攻略 2021年12月17日
  • 订的鲜牛奶怎么加热,在超市买鲜牛奶回来,怎么加热喝好

    技术订的鲜牛奶怎么加热,在超市买鲜牛奶回来,怎么加热喝好鲜奶是可以加热的订的鲜牛奶怎么加热,但温度以正好喝为易,温度太高会破坏它的营养,牛奶里的蛋白质会凝成难以消化的胶状物,不利于吸收。所以牛奶加热温度不宜过高,加热到1

    生活 2021年10月30日
  • 图像处理—图像的旋转

    技术图像处理—图像的旋转 图像处理—图像的旋转此处不叙述公式的推导,只是以初学者的角度理顺思路与总结重要知识点。
    图像的旋转公式为
    $$\left\{\begin{array}{c}i^{'}=icos

    礼包 2021年12月24日