python logging日志级别设置没有效果?,pythonlogging,import loggi
python logging日志级别设置没有效果?,pythonlogging,import loggi
import logging
from logging.handlers import RotatingFileHandler
log_file = "log/log"
datetime_format = "%Y-%m-%d %H:%M:%S"
per_log_file_max_size = 10240
backup_count = 3
log_format = "%(asctime)s %(filename)sline:%(lineno)d %(message)s"
rotate_file_handler = RotatingFileHandler(log_file, maxBytes=per_log_file_max_size,
backupCount=backup_count)
rotate_file_handler.setLevel(logging.NOTSET)
formatter = logging.Formatter(log_format)
rotate_file_handler.setFormatter(formatter)
logging.getLogger('').addHandler(rotate_file_handler)
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
logging.error('error')
输出:
2017-02-10 18:00:26,408 test.pyline:32 This is warning message
2017-02-10 18:00:26,408 test.pyline:33 error
2017-02-10 18:00:26,408 test.pyline:34 critical
设置的日志级别是NOSET,实际上是WARNING
求解释:
因为 NOSET 日志级别的效果是这样的:
Logger.setLevel(lvl) Sets the threshold for this logger to lvl. Logging messages which are less severe than lvl will be ignored. When a logger is created, the level is set to NOTSET (which causes all messages to be processed when the logger is the root logger, or delegation to the parent when the logger is a non-root logger). Note that the root logger is created with level WARNING. The term ‘delegation to the parent’ means that if a logger has a level of NOTSET, its chain of ancestor loggers is traversed until either an ancestor with a level other than NOTSET is found, or the root is reached. If an ancestor is found with a level other than NOTSET, then that ancestor’s level is treated as the effective level of the logger where the ancestor search began, and is used to determine how a logging event is handled. If the root is reached, and it has a level of NOTSET, then all messages will be processed. Otherwise, the root’s level will be used as the effective level.
因为 logging.getLogger('')(root logger)的默认日志级别是 WARNING 不是 NOSET,所以 rotate_file_handler 将使用这个 WARNING 的日志级别。
将 logging.getLogger('') 的日志级别也改为 NOTSET 就可以了:
logger = logging.getLogger('')logger.setLevel(logging.NOTSET)logger.addHandler(rotate_file_handler)
$ cat log2017-02-10 23:04:23,583 test.pyline:20 This is debug message2017-02-10 23:04:23,584 test.pyline:21 This is info message2017-02-10 23:04:23,584 test.pyline:22 This is warning message2017-02-10 23:04:23,584 test.pyline:23 error
参考:
https://docs.python.org/3/lib...
编橙之家文章,
相关内容
- ipython notebook 导入numpy异常如何解决,ipythonnumpy,我在s
- python能实现区域找图功能吗?,python区域,请问用什么方
- Vim如何设置syntastic插件使用python3的解释器?,syntasti
- Python namespace应该如何理解,pythonnamespace,python爱好者们
- 类似测&#35797这种编码如何用python转换成
- SQLAlchemy缓存数据生成原理是什么,sqlalchemy原理,我现在
- Flask Web开发第6章 程序中集成发送电子邮件功能 raise
- 中小型网站开发用SQLObject和peewee哪个更适,sqlobjectpee
- Python requests抓取速度变慢求分享应对经验,pythonreques
- 同样源码把requests库替换成scrapy抓取内容就报500错误,是
评论关闭