Naz*_*hal 2 python logging config-files python-2.7
当我在配置文件中配置根记录器时。其他子记录器不遵循相同的配置。
主文件
import logging
import logging.config
import test
logging.config.fileConfig("logger.ini")
logger = logging.root
logger.critical("main")
test.f()
Run Code Online (Sandbox Code Playgroud)
测试文件
import logging
logger = logging.getLogger(__name__)
def f():
print "inside f"
logger.critical("Test")
print logger.parent.name
print logger.parent.handlers
Run Code Online (Sandbox Code Playgroud)
日志文件
[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
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我没有
CRITICAL:root:main
inside f
root
[<logging.StreamHandler object at 0x00000000021C4908>]
Run Code Online (Sandbox Code Playgroud)
但我没有其他文件的日志。我认为如果孩子们没有任何处理程序,他会将日志发送给他的父母。知道为什么我没有看到日志吗?或如何解决?
这里发生的是,在记录器获取test.py你打电话之前创建logging.config.fileConfig("logger.ini")的main.py。一旦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。
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |