【发布时间】:2020-10-08 06:38:19
【问题描述】:
我希望能够在某个级别拥有自己的记录器,但不显示来自其他模块的信息。
我有这些版本:
FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'
def configure_logging():
# set up logging to console
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter(FORMAT)
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
这个版本,在 DEBUG 上打印所有内容,不仅是我的记录器
FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'
def configure_logging():
# set up logging to console
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(FORMAT)
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
此版本在 DEBUG 上不打印任何内容,即使我的记录器配置为 setLevel(logging.DEBUG),并调用 logger.debug('my_message')
所以我尝试在下一个版本中制作不同的控制台处理程序
FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'
def configure_logging():
# set up logging to console
root_console = logging.StreamHandler()
root_console.setLevel(logging.INFO)
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter(FORMAT)
root_console.setFormatter(formatter)
console.setFormatter(formatter)
logging.getLogger('').addHandler(root_console)
logging.getLogger('my_logger').addHandler(console)
事实证明,现在我实现了我想要的,但是,INFO 消息被记录了两次(我假设每个处理程序一个)...
所以,我想有更好的方法。
作为总结,我想要这样的东西:
-
my_module1.logger1 --> 调试
-
my_module1.logger2 --> 调试
-
my_module2.logger1 --> 调试
-
my_module2.logger2 --> 警告
-
my_module2.logger3 --> 调试
-
REST_OF_LOGS --> 信息
所以我可以这样做(伪代码):
'my_module1'.setLevel(DEBUG)
'my_module2'.setLevel(DEBUG)
'my_module2.logger2'.setLevel(WARNING)
''.setLevel(INFO)
【问题讨论】:
标签: python python-3.x logging python-logging