0

蟒蛇新手。现在我已经被困了一段时间了。当我尝试使用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()。但是我真的不明白为什么最后一次调用该函数时什么也没写。有什么想法吗?

4

2 回答 2

2

记录器有一个命名约定,名称“简单记录器”由于空格而无效。

您应该用句号替换空格。我们通常使用 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'

引用记录器对象:

该名称可能是一个以句点分隔的层次值,例如foo.bar.baz(尽管它也可能只是简单foo,的例子)。层次列表中更靠下的记录器是列表中更高的记录器的子级。例如,给定一个名称为 的foo记录器,名称为foo.barfoo.bar.baz和的记录器foo.bam都是 的后代foo。记录器名称层次结构类似于 Python 包层次结构,如果您使用推荐的结构按模块组织记录器,则与它相同logging.getLogger(__name__)。这是因为在一个模块中,__name__是 Python 包命名空间中的模块名称。

于 2017-05-27T07:00:27.733 回答
0

弄清楚(愚蠢的)错误是什么。实际上,它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它工作正常。

于 2017-05-27T07:38:45.803 回答