Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何配置项目中所有脚本的日志记录?_Python_Logging_Packages - Fatal编程技术网

Python 如何配置项目中所有脚本的日志记录?

Python 如何配置项目中所有脚本的日志记录?,python,logging,packages,Python,Logging,Packages,我在config.py中添加了以下内容: def set_up_logging(): # your logging setup code 然后我在做什么 from config import * 在我所有的脚本和导入的文件中 不幸的是,这会导致创建多个日志文件 如何解决这个问题?我不希望将日志记录配置为控制台和文件的集中式config.py。案例1:独立脚本/程序 如果我们讨论的是多个独立的脚本,它们应该以相同的方式设置日志:我会说,每个独立的应用程序都应该有自己的日志。如果你确实不

我在config.py中添加了以下内容:

def set_up_logging():
    # your logging setup code
然后我在做什么

from config import *
在我所有的脚本和导入的文件中

不幸的是,这会导致创建多个日志文件

如何解决这个问题?我不希望将日志记录配置为控制台和文件的集中式config.py。

案例1:独立脚本/程序

如果我们讨论的是多个独立的脚本,它们应该以相同的方式设置日志:我会说,每个独立的应用程序都应该有自己的日志。如果你确实不想这样,你就必须这样做

确保所有应用程序都具有相同的日志文件名,例如,在config.py中创建一个带有参数时间戳的函数,该时间戳由脚本提供 指定附加值 确保不会在某个地方调用config.py两次,因为您将添加两次日志处理程序,这将导致每个日志消息打印两次。 案例2:一个由模块组成的大型应用程序

如果我们讨论的是一个由模块组成的大型应用程序,您可以采用如下结构:

config.py:

def set_up_logging():
    # your logging setup code
模块示例某些_module.py:

import logging

def some_function():
    logger = logging.getLogger(__name__)

    [...]

    logger.info('sample log')

    [...]
main示例main.py

import logging
from config import set_up_logging
from some_module import some_function

def main():
    set_up_logging()

    logger = logging.getLogger(__name__)
    logger.info('Executing some function')

    some_function()

    logger.info('Finished')

if __name__ == '__main__':
    main()
说明:

通过在main中调用setup\u logging,您可以配置应用程序根记录器 每个模块都从main调用,并通过logger=logging.getLogger\uuuuu name\uuuu获取其记录器。由于模块记录器位于根记录器下面的层次结构中,这些日志会传播到根记录器,并由根记录器的处理程序处理。
有关更多信息,请参阅和/或

,您可以使用打开的'log.txt','a'作为f:f.writelogging部分手动将它们记录到txt文件中,并对具有相同log.txt文件的所有脚本执行此操作。对于控制台,您可以使用print语句。我想打印时间戳,使用print时需要重复编码。@Dims使其成为函数?您可以使用datetime.datetime.now作为打印中的参数之一。因此,既然您必须打印日志,那么您可以使用时间戳打印日志。整个应用程序是什么样子的?是否有运行所有模块的主文件?或者换一种说法:这个应用程序是由不同的部分脚本组成的,还是除了记录独立运行的独立脚本之外的其他部分脚本?