在包中记录

时间:2018-09-24 17:35:33

标签: python logging

我正在开发一个程序包,其他人将使用该程序包编写处理脚本。为了测试/调试/避免疯狂,我想在代码中包含一些日志记录语句,尤其是使用为另一个项目开发的logging_setup()实用程序函数来进行格式化/文件输出控制。 / p>

但是,由于我不是在编写一个自包含的应用程序,而是要由其他程序调用的库,因此我在应该使用logging_setup()实用程序才能生成所需的库时感到困惑记录我想要的结果。这使我想知道在程序包中使用日志记录系统是否是一个好主意。

logging_setup()实用程序在哪里可以使用?

编辑:这是我上面提到的功能:

def logging_setup(cfg_path=definitions.LOG_CONFIG_PATH, lvl=logging.INFO):
    """Setup logging tool from YAML configuration file.

    This should only be run once. Formatted (or configured) logging can only be
    done from within functions/classes in other modules.
    """

    # create directory for log files if not already there
    try:
        os.makedirs(definitions.LOGS_PATH)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise

    # configure logging from yaml config file
    if os.path.exists(cfg_path):
        with open(cfg_path, 'rt') as f:
            config = yaml.safe_load(f.read())

        logging.config.dictConfig(config)

    else:
        logging.basicConfig(level=lvl)

1 个答案:

答案 0 :(得分:5)

  

logging_setup()实用程序在哪里可以使用?

在库代码中,您不应在任何地方配置日志记录。由库的用户(应用程序分发者)配置日志记录处理程序。

作为库作者,您对运行时上下文一无所知,甚至都不知道是否有可写文件系统可用于创建日志文件。但是,要使用 logging,您无需关心配置-只需import logging并在模块级别创建记录器,就可以从库代码中记录事件。库代码不是要决定这些日志事件在何处-或它们是否会随处可见。

如果要提供 app 并希望记录输出,则将记录配置为应用程序启动时要做的第一件事-通常在Python中,这意味着调用logging.config.dictConfig进入main()函数后不久进行了类似操作(请确保在import时没有进行日志记录配置。)