代码之家  ›  专栏  ›  技术社区  ›  tuk

如何防止在多模块项目中按模块重新配置根记录器?

  •  2
  • tuk  · 技术社区  · 6 年前

    我正在使用Python2.7进行一个多模块项目。如前所述 here 我在main.py中配置了如下登录

    logging.basicConfig(
        format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
        datefmt='%d-%m-%Y:%H:%M:%S',
        filename='/home/ubuntu/logs/centralized_upgrade.log',
        level=logging.INFO)
    

    在每一个我需要记录的模块中,我只是在打一个如下的电话

    import logging
    ...
    logging.info('Hello World')
    

    但我的疑问是,在某些模块中是否再次重新配置了根记录器(可能类似于下面的内容)

    logging.basicConfig(
            format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
            datefmt='%d-%m-%Y:%H:%M:%S',
            filename='/home/ubuntu/logs/module.log',
            level=logging.INFO)
    

    然后所有日志消息将开始进入新文件。有人能告诉我处理这件事的最佳方法吗?如何防止根记录器的重新配置?我的意图是日志配置应该与中定义的保持一致 main.py 不管在任何子模块中进行任何重新配置。

    在许多地方,建议不要使用root logger,而是像前面提到的那样定义一个logger here

    1 回复  |  直到 6 年前
        1
  •  0
  •   tuk    6 年前

    不是一个完整的答案,但是: logging.basicConfig 不会做任何事 如果根记录器已经为其配置了处理程序。所以如果是 多次调用时,只有第一个将应用给定的 根记录器的配置。