网站地图 联系我们

学习python首选-实战python学习班,专注于python高级工程师培养,python课程:包括Python核心编程技术、全栈开发、网络爬虫、人工智能等。python全栈工程师+提高工作经验,获取免费试听课程!
当前位置: python培训 > python学习 > 常见问题 > 正文

python logging日志级别设置没有效果?

来源:肚皮舞 浏览量: 发布日期:20-08-03 16:05:37 调整字体大小【 【所属栏目:常见问题】

  python logging日志级别设置没有效果?

  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 log

  2017-02-10 23:04:23,583 test.pyline:20 This is debug message

  2017-02-10 23:04:23,584 test.pyline:21 This is info message

  2017-02-10 23:04:23,584 test.pyline:22 This is warning message

  2017-02-10 23:04:23,584 test.pyline:23 error

  参考:

  https://docs.python.org/3/lib...

标签:
肚皮舞新闻动态News Center

肚皮舞视频

肚皮舞培训课程

联系卡伊丝contact us
联系我们
python培训「零基础入门到精通」python人工智能编程培训班-0798wz.com

咨询热线:18301225663