Python Logger无法正常工作

Jam*_*ing 14 python logging

我尝试使用Python中的日志记录来编写一些日志,但奇怪的是,只会error记录下来,info无论我设置哪个级别,都会被忽略.

码:

import logging
import logging.handlers

if __name__ == "__main__":
    logger = logging.getLogger()
    fh = logging.handlers.RotatingFileHandler('./logtest.log', maxBytes=10240, backupCount=5)
    fh.setLevel(logging.DEBUG)#no matter what level I set here
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    logger.info('INFO')
    logger.error('ERROR')
Run Code Online (Sandbox Code Playgroud)

结果是:

2014-01-14 11:47:38,990 - root - ERROR - ERROR
Run Code Online (Sandbox Code Playgroud)

根据http://docs.python.org/2/library/logging.html#logging-levels

INFO也应该被记录下来.

aba*_*ert 27

问题是记录器的级别仍设置为默认值.因此,记录器甚至在它到达处理程序之前丢弃该消息.处理程序如果收到消息就接受了消息这一事实无关紧要,因为它永远不会收到消息.

所以,只需添加:

logger.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)

正如文档所解释的那样,记录器的默认级别是NOTSET,这意味着它会检查其父节点,即根节点,其默认值为WARNING.

并且您可以将处理程序保留为默认值NOTSET,这意味着它将延迟到记录器的过滤.

  • 我已经完成了OP所做的事情,但我也设置了级别,但它仍然不会记录:/ (3认同)

Use*_*482 14

我有一个记录器使用logging.getLogger(__name__). 我尝试将日志级别设置为logging.INFO其他答案中提到的那样,但这不起作用。

对创建的记录器及其父(根)记录器的快速检查显示它没有任何处理程序(使用hasHandler())。该文档指出,处理程序应该在第一次调用任何日志记录函数等时创建debug, info

如果没有为根记录器定义处理程序,则函数 debug()、info()、warning()、error() 和 critical() 将自动调用 basicConfig()。

但事实并非如此。我所要做的就是basicConfig()手动调用。

解决方案:

import logging
logging.basicConfig()  # Add logging level here if you plan on using logging.info() instead of my_logger as below.

my_logger = logging.getLogger(__name__)
my_logger .setLevel(logging.INFO)

my_logger .info("Hi")
Run Code Online (Sandbox Code Playgroud)
INFO:__main__:Hi
Run Code Online (Sandbox Code Playgroud)


jam*_*non 5

我认为您可能必须设置正确的阈值。

logger.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)