单个记录器的较低记录级别
Lower logging level for single logger
我使用的包记录太多。
它已正确设置记录器,因此我可以使用 getLogger
.
获取单个记录器
是否可以降低特定记录器生成的所有消息的记录级别?
我知道有 setLevel
功能,可以禁用所有低于特定级别的消息,但我仍然希望记录消息,只是在较低级别,例如INFO 级别的消息应该记录在 DEBUG 中。
这取决于您想要发生什么。您可以使用过滤器或适配器来修改日志级别。
过滤器更简单,但只适用于降低日志级别。
适配器解决方案的优点是可以尽早设置级别。适配器的缺点是它只是记录器的包装器,因此您需要将它传递到所有使用记录器的地方。如果那是第三方模块,适配器解决方案将无法实现。
# Using filters
import logging
def changeLevel(record):
if record.levelno == logging.INFO:
record.levelno = logging.DEBUG
record.levelname = "DEBUG"
return record
logger = logging.getLogger('name')
logger.addFilter(changeLevel)
# Using an adapter
import logging
class ChangeLevel(logging.LoggerAdapter):
def log(self, level, msg, *args, **kwargs):
if level == logging.INFO:
level = logging.DEBUG
super().log(level, msg, args, kwargs)
logger_ = logging.getLogger('name', {})
logger = ChangeLevel(logger_)
我使用的包记录太多。
它已正确设置记录器,因此我可以使用 getLogger
.
是否可以降低特定记录器生成的所有消息的记录级别?
我知道有 setLevel
功能,可以禁用所有低于特定级别的消息,但我仍然希望记录消息,只是在较低级别,例如INFO 级别的消息应该记录在 DEBUG 中。
这取决于您想要发生什么。您可以使用过滤器或适配器来修改日志级别。
过滤器更简单,但只适用于降低日志级别。
适配器解决方案的优点是可以尽早设置级别。适配器的缺点是它只是记录器的包装器,因此您需要将它传递到所有使用记录器的地方。如果那是第三方模块,适配器解决方案将无法实现。
# Using filters
import logging
def changeLevel(record):
if record.levelno == logging.INFO:
record.levelno = logging.DEBUG
record.levelname = "DEBUG"
return record
logger = logging.getLogger('name')
logger.addFilter(changeLevel)
# Using an adapter
import logging
class ChangeLevel(logging.LoggerAdapter):
def log(self, level, msg, *args, **kwargs):
if level == logging.INFO:
level = logging.DEBUG
super().log(level, msg, args, kwargs)
logger_ = logging.getLogger('name', {})
logger = ChangeLevel(logger_)