记录器配置以记录到文件

时间:2017-05-27 06:03:23

标签: python python-2.7 logging filehandler

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')

我还检查了logger对象,看看我是否可以从其属性中获取任何线索。下面是对象

{'disabled': 0,
 'filters': [],
 'handlers': [<logging.FileHandler object at 0x7ff03358ce90>],
 'level': 30,
 'name': 'root',
 'parent': None,
 'propagate': 1}

不确定它是否有用,但我注意到之前显示的属性disabled TRUE,但现在每次都是0

有人对此有任何线索吗?

更新:问题是由于对同一配置文件多次调用logging.config.fileConfig()。但我真的不明白为什么在最后一次调用该函数时没有写任何内容。有什么想法?

2 个答案:

答案 0 :(得分: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.bazfoo.bam的记录器都是foo的后代。记录器名称层次结构类似于Python包层次结构,如果您使用建议的构造logging.getLogger(__name__)按模块组织记录器,则与其相同。那是因为在模块中,__name__是Python包命名空间中的模块名称。

答案 1 :(得分:0)

弄清楚(愚蠢的)错误是什么。实际上,http://dogether.www023.in.rs/被多次调用,因此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一样,它可以正常工作。