记录器配置以记录到文件
logger configuration to log to file
Python新手。现在我已经被困了一段时间了。当我尝试使用 ini
配置在文件中写入日志时,文件中没有捕获任何内容。我试图调试问题,但找不到任何线索。不使用 ini
文件写日志工作得很好。
下面是代码和ini文件
import logging
from logging.config import fileConfig
def info(message):
fileConfig('logging_config.ini')
logger=logging.getLogger("simple logger")
logger.warning('Something is not right')
logger.warning(message)
logging_config.ini
[loggers]
keys=root
[handlers]
keys=file_handler
[logger_root]
level=WARNING
handlers=file_handler
[formatters]
keys=formatter
[formatter_formatter]
format='%(message)s'
[handler_file_handler]
class=FileHandler
level=WARNING
formatter=formatter
args=('dummyoutput.log','w')
我还检查了记录器对象,看看是否可以从它的属性中获得任何线索。下面是对象
{'disabled': 0,
'filters': [],
'handlers': [<logging.FileHandler object at 0x7ff03358ce90>],
'level': 30,
'name': 'root',
'parent': None,
'propagate': 1}
不确定它是否有帮助,但我注意到 属性 disabled
之前显示 TRUE
但现在每次都是 0
。
有人对此有任何线索吗?
更新: 问题是由于对同一配置文件多次调用 logging.config.fileConfig()。但是我真的无法理解为什么最后一次调用该函数时什么也没写。对此有什么想法吗?
记录器有一个命名约定,名称 "simple logger" 无效,因为 space。
您应该用句点替换 space。我们通常使用 Python 记录器的包名。
解决方法如下:
import logging
from logging.config import fileConfig
def info(message):
fileConfig('logging_config.ini')
logger = logging.getLogger("simple.logger")
logger.warning('Something is not right')
logger.warning(message)
if __name__ == "__main__":
info("hello")
效果很好。
'Something is not right'
'hello'
引用记录器对象:
The name is potentially a period-separated hierarchical value, like foo.bar.baz
(though it could also be just plain foo,
for example). Loggers that are further down in the hierarchical list are children of loggers higher up in the list. For example, given a logger with a name of foo
, loggers with names of foo.bar
, foo.bar.baz
, and foo.bam
are all descendants of foo
. The logger name hierarchy is analogous to the Python package hierarchy, and identical to it if you organise your loggers on a per-module basis using the recommended construction logging.getLogger(__name__)
. That’s because in a module, __name__
is the module’s name in the Python package namespace.
找出(愚蠢的)错误是什么。实际上 info(message)
被调用了不止一次, fileConfig()
也是如此,因为它在 info
函数中是同一个配置文件。因此,问题。修改如下代码,成功了。
import logging
from logging.config import fileConfig
def info(message):
logger.warning('Something is not right')
logger.warning(message)
fileConfig('logging_config.ini')
logger=logging.getLogger("simple.logger")
更新: 即使我们不遵循记录器命名约定,例如。因为我给了 simple logger
而不是 simple.logger
它工作正常。
Python新手。现在我已经被困了一段时间了。当我尝试使用 ini
配置在文件中写入日志时,文件中没有捕获任何内容。我试图调试问题,但找不到任何线索。不使用 ini
文件写日志工作得很好。
下面是代码和ini文件
import logging
from logging.config import fileConfig
def info(message):
fileConfig('logging_config.ini')
logger=logging.getLogger("simple logger")
logger.warning('Something is not right')
logger.warning(message)
logging_config.ini
[loggers]
keys=root
[handlers]
keys=file_handler
[logger_root]
level=WARNING
handlers=file_handler
[formatters]
keys=formatter
[formatter_formatter]
format='%(message)s'
[handler_file_handler]
class=FileHandler
level=WARNING
formatter=formatter
args=('dummyoutput.log','w')
我还检查了记录器对象,看看是否可以从它的属性中获得任何线索。下面是对象
{'disabled': 0,
'filters': [],
'handlers': [<logging.FileHandler object at 0x7ff03358ce90>],
'level': 30,
'name': 'root',
'parent': None,
'propagate': 1}
不确定它是否有帮助,但我注意到 属性 disabled
之前显示 TRUE
但现在每次都是 0
。
有人对此有任何线索吗?
更新: 问题是由于对同一配置文件多次调用 logging.config.fileConfig()。但是我真的无法理解为什么最后一次调用该函数时什么也没写。对此有什么想法吗?
记录器有一个命名约定,名称 "simple logger" 无效,因为 space。
您应该用句点替换 space。我们通常使用 Python 记录器的包名。
解决方法如下:
import logging
from logging.config import fileConfig
def info(message):
fileConfig('logging_config.ini')
logger = logging.getLogger("simple.logger")
logger.warning('Something is not right')
logger.warning(message)
if __name__ == "__main__":
info("hello")
效果很好。
'Something is not right'
'hello'
引用记录器对象:
The name is potentially a period-separated hierarchical value, like
foo.bar.baz
(though it could also be just plainfoo,
for example). Loggers that are further down in the hierarchical list are children of loggers higher up in the list. For example, given a logger with a name offoo
, loggers with names offoo.bar
,foo.bar.baz
, andfoo.bam
are all descendants offoo
. The logger name hierarchy is analogous to the Python package hierarchy, and identical to it if you organise your loggers on a per-module basis using the recommended constructionlogging.getLogger(__name__)
. That’s because in a module,__name__
is the module’s name in the Python package namespace.
找出(愚蠢的)错误是什么。实际上 info(message)
被调用了不止一次, fileConfig()
也是如此,因为它在 info
函数中是同一个配置文件。因此,问题。修改如下代码,成功了。
import logging
from logging.config import fileConfig
def info(message):
logger.warning('Something is not right')
logger.warning(message)
fileConfig('logging_config.ini')
logger=logging.getLogger("simple.logger")
更新: 即使我们不遵循记录器命名约定,例如。因为我给了 simple logger
而不是 simple.logger
它工作正常。