Python日志记录多个模块每个模块记录到单独的文件

Python日志记录多个模块每个模块记录到单独的文件,python,logging,module,Python,Logging,Module,我有一个主脚本和多个模块。现在我有了日志记录设置,所有模块的所有日志记录都放在同一个日志文件中。当它全部放在一个文件中时,调试变得很困难。因此,我想将每个模块分离到它自己的日志文件中。我还希望看到每个模块使用的请求模块进入到使用它的模块的日志中。我不知道这是否可能。我搜索了所有地方,尝试了我能想到的所有方法,但它总是返回到将所有内容记录到一个文件中或设置每个模块中的日志,并从我的主模块启动脚本,而不是作为模块导入 main.py import logging, logging.handlers

我有一个主脚本和多个模块。现在我有了日志记录设置,所有模块的所有日志记录都放在同一个日志文件中。当它全部放在一个文件中时,调试变得很困难。因此,我想将每个模块分离到它自己的日志文件中。我还希望看到每个模块使用的请求模块进入到使用它的模块的日志中。我不知道这是否可能。我搜索了所有地方,尝试了我能想到的所有方法,但它总是返回到将所有内容记录到一个文件中或设置每个模块中的日志,并从我的主模块启动脚本,而不是作为模块导入

main.py

import logging, logging.handlers
import other_script.py

console_debug = True
log = logging.getLogger()

def setup_logging():    
    filelog = logging.handlers.TimedRotatingFileHandler(path+'logs/api/api.log',
                when='midnight', interval=1, backupCount=3)
    filelog.setLevel(logging.DEBUG)
    fileformatter = logging.Formatter('%(asctime)s %(name)-15s %(levelname)-8s %(message)s')
    filelog.setFormatter(fileformatter)
    log.addHandler(filelog)

    if console_debug:
        console = logging.StreamHandler()
        console.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(name)-15s: %(levelname)-8s %(message)s')
        console.setFormatter(formatter)
        log.addHandler(console)

if __name__ == '__main__':
    setup_logging()
其他_script.py

import requests
import logging

log = logging.getLogger(__name__)

python日志记录的一个非常基本的概念是,日志所经过的每个文件、流或其他地方都相当于一个处理程序。因此,如果您希望每个模块都登录到不同的文件,则必须为每个模块提供自己的处理程序。这也可以从中心位置完成。在main.py中,您可以添加以下内容,以使其他_脚本模块记录到单独的文件中:

other\u logger=logging.getLogger(“other\u脚本”)
other_logger.addHandler(logging.FileHandler('other_file'))
other_logger.propagate=False

只有将处理程序添加到根记录器时,才需要最后一行。如果将“传播”保持为默认值True,则所有日志也将发送到根日志记录器处理程序。在您的场景中,最好甚至不使用根记录器,而是在main中使用特定的命名记录器,如
getLogger(“\uuu main\uuu”)

“当所有日志都在一个文件中时,很难进行调试。”如果日志记录分散在多个文件中,而您没有任何方法将条目整理好,那么这将变得更加困难。如果我的脚本记录在不同的日志中,这将变得更加容易,因为每个脚本都执行一组特定的任务,而当您将它们全部塞进一起时,很难理解。特别是因为主脚本正在设置一个API,所以我会同时收到多个请求。不管怎么说,看起来python并没有办法做我想做的事情,或者至少不是我能看到的事情。太好了!我想这会让我几乎达到目的。最后一个问题是,如果我在other_脚本和other_脚本2中有请求模块。是否有办法将请求模块调试重定向到它所用脚本的日志?定义它所用的
脚本。一般来说,这将非常困难。如果我在other_script1和other_script2中有请求,并且它们都使用请求,那么将请求模块重定向到使用它的脚本的日志中。我一直在尝试你的建议,并试图保持我的def以及有旋转日志,但我似乎无法让它正常工作。在这一点上,我准备只拥有一个主日志,并在问题出现时查找问题。到目前为止,我所做的一切似乎都让事情变得一团糟。我不知道你是否还有其他帮助,但如果没有,我感谢你的努力。顺便说一句,我试着像你上面所做的那样简单,但没有任何东西显示在该模块的日志中。我不知道getLogger是否工作正常