Python 在包中进行日志记录

Python 在包中进行日志记录,python,logging,Python,Logging,我正在开发一个包,其他人将使用它来编写处理脚本。出于测试/调试/不疯狂的目的,我想在代码中包含一些日志语句,尤其是使用我为另一个项目开发的用于格式化/文件输出控制的logging\u setup()实用程序函数 但是,因为我不是在编写一个自包含的应用程序,而是一个要由其他程序调用的库,所以我不知道应该在哪里使用logging\u setup()实用程序来生成所需的日志结果。这让我怀疑在我的包中使用日志系统是否是一个好主意 我应该在哪里使用我的logging\u setup()实用程序(如果有)

我正在开发一个包,其他人将使用它来编写处理脚本。出于测试/调试/不疯狂的目的,我想在代码中包含一些日志语句,尤其是使用我为另一个项目开发的用于格式化/文件输出控制的
logging\u setup()
实用程序函数

但是,因为我不是在编写一个自包含的应用程序,而是一个要由其他程序调用的库,所以我不知道应该在哪里使用
logging\u setup()
实用程序来生成所需的日志结果。这让我怀疑在我的包中使用日志系统是否是一个好主意

我应该在哪里使用我的
logging\u 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)
我应该在哪里使用我的
logging\u setup()
实用程序(如果有)

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

作为库作者,您对运行时上下文一无所知,甚至不知道是否有一个可写的文件系统可用于创建日志文件。但是要使用
日志记录
,您不需要关心配置-只需在模块级别导入日志记录并创建日志记录程序,就可以从库代码记录事件。不是由库代码来决定这些日志事件的去向——或者它们是否去了任何地方

如果您正在提供一个应用程序,并且想要日志输出,那么将日志配置为应用程序启动时的第一件事—通常在Python中,这意味着在进入
main()
函数后不久将调用
logging.config.dictConfig
或类似的函数(请确保日志配置不会在导入时发生)

我应该在哪里使用我的
logging\u setup()
实用程序(如果有)

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

作为库作者,您对运行时上下文一无所知,甚至不知道是否有可写文件系统可用于创建日志文件。但是要使用
日志记录
,您不需要关心配置-只需在模块级别导入日志记录并创建日志记录程序,就可以记录ev不是由库代码来决定这些日志事件去哪里,或者它们是否去了任何地方


如果您正在提供一个应用程序,并且想要日志输出,那么将日志配置为应用程序启动时的第一件事—通常在Python中,这意味着在进入
main()
函数后不久将调用
logging.config.dictConfig
或类似的函数(请确保日志配置不会在导入时发生。do?除非你想展示一个示例设置并解释你想要的行为,否则你的要求很不清楚。@wim.很公平。如果用户需要日志记录,就让他们调用你的函数。库不应该干扰根日志记录程序;这只供顶级脚本使用。你的包应该有自己的日志记录程序,用
logging.getLogger(\uuuuu name\uuuuuuuuuuuuuuuuuuuuuuu)
,您所做的任何配置都应该只应用于该配置。
logging\u setup()的具体功能是什么
do?除非你想展示一个示例设置并解释你想要的行为,否则你的要求很不清楚。@wim.很公平。如果用户需要日志记录,就让他们调用你的函数。库不应该干扰根日志记录程序;这只供顶级脚本使用。你的包应该有自己的日志记录程序,用
logging.getLogger(uuu name_uuuuu)
,您所做的任何配置都应该只应用于此。有关此位置的一些支持,请参阅下面的说明。在我的另一个项目(一个自包含的应用程序)中,我使用相同的功能来加速正确的日志配置(用于我想要做的事情)。我正在考虑如何在这里使用相同的配置,但这个答案正是我想要的:编写库的良好实践的描述。非常感谢。有关此职位的一些支持,请参阅我的另一个项目(一个独立的应用程序)中。下的注释,我使用相同的函数来加速正确的日志配置(我想做的)。我正在考虑如何在这里使用相同的配置,但这个答案正是我想要的:描述编写库的良好实践。非常感谢。