Python 如何配置项目中所有脚本的日志记录?
我在config.py中添加了以下内容:Python 如何配置项目中所有脚本的日志记录?,python,logging,packages,Python,Logging,Packages,我在config.py中添加了以下内容: def set_up_logging(): # your logging setup code 然后我在做什么 from config import * 在我所有的脚本和导入的文件中 不幸的是,这会导致创建多个日志文件 如何解决这个问题?我不希望将日志记录配置为控制台和文件的集中式config.py。案例1:独立脚本/程序 如果我们讨论的是多个独立的脚本,它们应该以相同的方式设置日志:我会说,每个独立的应用程序都应该有自己的日志。如果你确实不
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作为打印中的参数之一。因此,既然您必须打印日志,那么您可以使用时间戳打印日志。整个应用程序是什么样子的?是否有运行所有模块的主文件?或者换一种说法:这个应用程序是由不同的部分脚本组成的,还是除了记录独立运行的独立脚本之外的其他部分脚本?