Python logging - 在多个模块中使用 root logger 配置文件
Python logging - config file in multiple modules with root logger
当我在配置文件中配置根记录器时。其他 children 个记录器不遵循相同的配置。
main.py
import logging
import logging.config
import test
logging.config.fileConfig("logger.ini")
logger = logging.root
logger.critical("main")
test.f()
test.py
import logging
logger = logging.getLogger(__name__)
def f():
print "inside f"
logger.critical("Test")
print logger.parent.name
print logger.parent.handlers
logger.ini
[loggers]
keys=root
[handlers]
keys=console
[formatters]
keys=form
[logger_root]
level=DEBUG
handlers=console
[handler_console]
class=StreamHandler
formatter=form
args=()
[formatter_form]
format=%(levelname)s:%(name)s:%(message)s
当我 运行 我没有的程序我得到了
CRITICAL:root:main
inside f
root
[<logging.StreamHandler object at 0x00000000021C4908>]
但是我没有其他文件的日志。
我认为如果 children 没有任何处理程序,他会将日志发送到他的 parent。知道为什么我看不到日志吗?或者如何解决?
这里发生的是在 test.py
中获取的记录器是在您在 main.py
中调用 logging.config.fileConfig("logger.ini")
之前创建的。一旦 fileConfig
被调用,所有未在配置文件中指定的预先存在的记录器将被删除。
我可以建议两种方法来解决这个问题:
不要在模块的全局范围内调用logging.getLogger
,只有在函数/方法中需要记录器时才会调用
更改您的代码,以便在调用 fileConfig()
时指定:logging.config.fileConfig("logger.ini", disable_existing_loggers=False)
。这会导致在应用配置之前创建的任何记录器得到维护而不是被禁用。
有关选项 #2 的详细信息,请参阅 https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig。
当我在配置文件中配置根记录器时。其他 children 个记录器不遵循相同的配置。
main.py
import logging
import logging.config
import test
logging.config.fileConfig("logger.ini")
logger = logging.root
logger.critical("main")
test.f()
test.py
import logging
logger = logging.getLogger(__name__)
def f():
print "inside f"
logger.critical("Test")
print logger.parent.name
print logger.parent.handlers
logger.ini
[loggers]
keys=root
[handlers]
keys=console
[formatters]
keys=form
[logger_root]
level=DEBUG
handlers=console
[handler_console]
class=StreamHandler
formatter=form
args=()
[formatter_form]
format=%(levelname)s:%(name)s:%(message)s
当我 运行 我没有的程序我得到了
CRITICAL:root:main
inside f
root
[<logging.StreamHandler object at 0x00000000021C4908>]
但是我没有其他文件的日志。 我认为如果 children 没有任何处理程序,他会将日志发送到他的 parent。知道为什么我看不到日志吗?或者如何解决?
这里发生的是在 test.py
中获取的记录器是在您在 main.py
中调用 logging.config.fileConfig("logger.ini")
之前创建的。一旦 fileConfig
被调用,所有未在配置文件中指定的预先存在的记录器将被删除。
我可以建议两种方法来解决这个问题:
不要在模块的全局范围内调用
logging.getLogger
,只有在函数/方法中需要记录器时才会调用更改您的代码,以便在调用
fileConfig()
时指定:logging.config.fileConfig("logger.ini", disable_existing_loggers=False)
。这会导致在应用配置之前创建的任何记录器得到维护而不是被禁用。
有关选项 #2 的详细信息,请参阅 https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig。