Python 如何为模块中的每个文件设置不同的日志记录级别?

Python 如何为模块中的每个文件设置不同的日志记录级别?,python,python-3.x,logging,python-module,Python,Python 3.x,Logging,Python Module,如何选择登录模块的级别 我有一个包含各种文件的应用程序, 我为理解日志模块和drop print()工作 我的日志记录目标是灵活地从代码(模块)的不同部分切换日志记录级别 我仅从主入口点功能执行此操作: 以下是我所拥有的: APP/PartA/Script1.py APP/PartA/Script2.py APP/Other/Tools.py APP/main.py 第一模块: #/PartA/Script1.py import logging from PartA.Script2 impor

如何选择登录模块的级别

我有一个包含各种文件的应用程序, 我为理解日志模块和drop print()工作 我的日志记录目标是灵活地从代码(模块)的不同部分切换日志记录级别 我仅从主入口点功能执行此操作:

以下是我所拥有的:

APP/PartA/Script1.py
APP/PartA/Script2.py
APP/Other/Tools.py
APP/main.py
第一模块:

#/PartA/Script1.py
import logging
from PartA.Script2 import *

logger = logging.getLogger(__name__)
# Logger Always on debug level:
logger.setLevel(logging.DEBUG)

handler1 = logging.StreamHandler()
handler1.setFormatter(logging.Formatter('\n%(levelname)s  %(name)s'))

logger.addHandler(handler1)

def add_ten(n)
    ten_added = add_five(n) + 5
    return ten_added
第二模块:

#/PartA/Script2.py
import logging

logger = logging.getLogger(__name__)
# Logger Always on debug level:
logger.setLevel(logging.DEBUG)

handler2 = logging.StreamHandler()
handler2.setFormatter(logging.Formatter('\n%(levelname)s  %(name)s %(funcName)s %(lineno)s \n%(message)s'))

logger.addHandler(handler2)

def add_five(n):
    return n + 5
主要切入点:

#main.py
import logging
from PartA.Script1 import *
from PartA.Script2 import *



logger = logging.getLogger(__name__)
# Logger is always on debug mode..
logger.setLevel(logging.DEBUG)

# Mainhandler:
handler = logging.StreamHandler()

handler.setLevel(logging.INFO)

# Here i control the logs levels from the other modules:
handler2.setLevel(logging.DEBUG)
handler1.setLevel(logging.ERROR)
这是可行的,因为我只需要更改主函数中的处理程序setlevels,但我不认为这很像python,必须将所有记录器设置为DEBUG级别似乎总是很奇怪,
对于任何新的.py文件,都需要非常重复的代码。

在python中,最好不要在模块中配置任何日志处理程序/格式化程序,只需使用NullHandler。处理程序的配置是使用模块在应用程序内部完成的

import logging

logger = logging.getLogger(__name__)
因此,模块内部的以下内容应足够

import logging

logger = logging.getLogger(__name__)

所以我不能在不同的模块中使用相同的记录器名称,对吗?终于明白了!非常感谢。如果我在main.py中只使用一个处理程序,那么它应该始终处于调试级别,然后我更改级别或更改不同记录器的处理程序。