为了账号安全,请及时绑定邮箱和手机立即绑定

在多个模块中使用Python登录

在多个模块中使用Python登录

慕少森 2019-11-21 12:58:52
我有一个具有以下结构的小型python项目-Project  -- pkg01   -- test01.py -- pkg02   -- test02.py -- logging.conf我计划使用默认的日志记录模块将消息打印到stdout和日志文件。要使用日志记录模块,需要进行一些初始化-import logging.configlogging.config.fileConfig('logging.conf')logger = logging.getLogger('pyApp')logger.info('testing')目前,在开始记录消息之前,我会在每个模块中执行此初始化。是否可以只在一个位置执行一次初始化,以便通过在整个项目中记录日志来重复使用相同的设置?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

最佳实践是在每个模块中都定义一个记录器,如下所示:


import logging

logger = logging.getLogger(__name__)

在模块顶部附近,然后在模块中的其他代码中执行例如


logger.debug('My message with %s', 'variable data')

如果您需要在模块内部细分日志记录活动,请使用例如


loggerA = logging.getLogger(__name__ + '.A')

loggerB = logging.getLogger(__name__ + '.B')

并登录loggerA并loggerB视情况而定。


在您的一个或多个主程序中,执行例如:


def main():

    "your program code"


if __name__ == '__main__':

    import logging.config

    logging.config.fileConfig('/path/to/logging.conf')

    main()

要么


def main():

    import logging.config

    logging.config.fileConfig('/path/to/logging.conf')

    # your program code


if __name__ == '__main__':

    main()

见这里用于从多个模块记录,并在这里用于代码日志配置将被用作其它的代码库模块。


更新:调用时fileConfig(),您可能想指定disable_existing_loggers=False是否使用Python 2.6或更高版本(有关更多信息,请参阅文档)。缺省值是True向后兼容的,这将导致禁用所有现有记录器,fileConfig()除非它们或它们的祖先在配置中明确命名。将该值设置为False,将保留现有记录器。如果使用的是Python 2.7 / Python 3.2或更高版本,则不妨考虑使用dictConfig()API,fileConfig()因为它可以更好地控制配置,因此它比API更好。


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信