我尝试使用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,这意味着它将延迟到记录器的过滤.
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)
| 归档时间: |
|
| 查看次数: |
24538 次 |
| 最近记录: |