python logging模块 之日志等级

今日想在程序中加入更好用的日志功能,利用到了logging模块,直接从网上抄了代码,无奈怎么也输出不了日志

import logging

# 获取一个logger对象
logger = logging.getLogger(__name__)

#logger.setLevel(logging.DEBUG)

# 创建文件和命令行的handler
s_handler = logging.StreamHandler()
f_handler = logging.FileHandler('file.log')

# 分别设置两个handler的日志等级,大于等于这个等级的才输出
f_handler.setLevel(logging.WARNING)
s_handler.setLevel(logging.INFO)

# 设置日志的输出格式并把格式添加到handler中
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(formatter)
s_handler.serFormatter(formatter)

# 把handler添加到logger对象中
logger.addHandler(f_handler)
logger.addHandler(s_handler)

# 输出各种等级的日志
logger.debug("debug log")
logger.info('info log')
logger.warning("warning log")
logger.critical("critical log")

但控制台只输出了 warning 和 critical 级别的log而 debug和info都没有输出;

warning log
critical log

Process finished with exit code 0


文件里面同样也是这两条log:

2018-12-28 11:30:27,459 - __main__ - WARNING - warning log
2018-12-28 11:30:27,459 - __main__ - CRITICAL - critical log

原因是使用的logger没有setLevel,采用了默认的level NOTSET,由于logger是NOTSET,所以会查账他的parent的level,为RootLogger的level,默认是warning,所以控制台及file就只输出了warning 及以上级别的log。


而logger的level会影响后续handler的输出:

  1. 当logger的level大于handler的level,则输出以logger为准
  2. 当logger的level小于handler的level,则输出以handler为准

所以logger等级应当设备最低的info级别

如有错误,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值