栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用指定编码记录多个模块和多个处理程序的最Python方式是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用指定编码记录多个模块和多个处理程序的最Python方式是什么?

对于由许多部分组成的模块,我使用文档中推荐的方法,每个模块只有一行

logger =logging.getLogger(__name__)
。正如您所指出的,该模块不应该知道或关心其消息的去向或位置,它只是将其传递给应该由主程序设置的记录器。

为了减少依赖于主程序的剪切粘贴,请确保您的模块具有合理的层次结构,并且仅在某个地方设置了日志记录功能,然后您可以通过任何希望的主程序调用该函数。

例如,制作一个logsetup.py:

import loggingdef configure_log(level=None,name=None):    logger = logging.getLogger(name)    logger.setLevel(level)    file_handler = logging.FileHandler('../logs/%s' % name,'w','utf-8')    file_handler.setLevel(logging.DEBUG)    file_format = logging.Formatter('%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d in %(funcName)s]')    file_handler.setFormatter(file_format)    logger.addHandler(file_handler)    console_handler = logging.StreamHandler()    console_handler.setLevel(logging.INFO)    console_format = logging.Formatter('%(message)s')    console_handler.setFormatter(console_format)    logger.addHandler(console_handler)

要使您的各个模块具有充当主模块的模式,请定义一个单独的函数,例如

main

在level0.py和/或level1.py中:

def main():  # do whatever

在最顶层的程序中,调用该函数:

import loggingfrom logsetup import configure_logconfigure_log(logging.DEBUG,'level0') # or 'level1'from level0 import main # or level1if __name__ == "__main__"  main()

您仍然应该在

__name__ == "__main__"
那里找到该子句,某些模块( cough multiprocessing cough
)的行为取决于该子句是否存在而有所不同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648166.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号