Python logging使用

快速配置

# -*- coding:utf-8 -*-
import logging# 默认配置root logger
logging.basicConfig(filename='root.log', level=logging.INFO)# 写入文件中
logging.debug('debug message')  # 低于INFO级别,不输出
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

通过Logger配置

  • 当程序模块众多时,每个模块可以分别创建logger,更将灵活;

  • 一个logger可以有多个FileHandler;

# -*- encoding:utf-8 -*-
import logging# 创建一个名为example的logger
logger = logging.getLogger('example')
logger.setLevel(logging.DEBUG)# 创建一个FileHandler,绑定到logger中
# 一个logger可以有多个FileHandler
fh1 = logging.FileHandler('warn.log')
fh1.setLevel(logging.WARN)  # 记录warn级别
logger.addHandler(fh1)logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')  # 以下都输出到warn.log
logger.error('error message')
logger.critical('critical message')# 再创建一个FileHandler,绑定到logger中
fh2 = logging.FileHandler('./error.log')
fh2.setLevel(logging.ERROR)  # 记录error级别
logger.addHandler(fh2)logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')  # 以下都输出到warn.log、error.log
logger.critical('critical message')

Logger的层级关系

# -*- encoding:utf-8 -*-
import logging
import sys# logging默认有root logger
print logging.root
print logging.getLogger()
print logging.getLogger() == logging.root# 没有handler
print logging.root.handlers# 一旦执行这个,就会自动添加stdout到handler中,下面两行等价
# logging.basicConfig(stream=sys.stdout, level=logging.WARN)
logging.warn('warn message')
print logging.root.handlers# 新建的logger,默认是root的孩子
child = logging.getLogger('child')
print child.parent
print child.handlers# 消息会自低向顶传到root
# 一条标准输出来自root
child.error('error message')child.addHandler(logging.StreamHandler())# 一条标准输出来自child;一条标准输出来自root
child.error('error message')# 自动解析层次结果;root->child->descendant
descendant = logging.getLogger('child.descendant')

Flask logging配置

# 需要:将所有输出都重定向到一个文件中;
# 查看flask logging文档
# Werkzeug logs basic request/response information to the 'werkzeug' logger.
# 所以需要在root logger指定日志文件handler;让Werkzeug接收的record向上传递到root中的handlerlogging.basicConfig(filename=filename, filemode='w', level=logging.INFO)# 同时,程序运行时可能会报错,需要将stdout与stderr重定向到日志文件中。
# 不能再使用handler,因为stdout也是filehandler,不存在handler绑定logger的
# 似乎更好的选择是用两个日志文件: nohup command > error.log 2>&1 &
sys.stdout = sys.stderr = open(filename, "a")

参考文献

python logging模块使用教程

Python root logger 解密

Logging Doc

转载于:https://www.cnblogs.com/yuanquanxi/p/10883700.html

Python logging使用相关推荐

  1. 关于使用python logging模块的几点总结

    关于使用python logging模块的几点总结 使用python的标准日志模块logging可以非常方便地记录日志.Python日志系统非常丰富.添加结构化或非结构化日志输出到python代码,写 ...

  2. Python LOGGING使用方法

    Python LOGGING使用方法 1. 简介 使用场景 场景 适合使用的方法 在终端输出程序或脚本的使用方法 print 报告一个事件的发生(例如状态的修改) logging.info()或log ...

  3. python logging模块使用

    python logging模块使用 logging模块 日志记录的重要性 在开发过程中,我们可以printf或者Debug来排查问题. 但是在生产环境中(黑盒环境)出现问题,我们并不能知道在运行的环 ...

  4. python logging模块使用_python logging模块使用

    近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- importloggin ...

  5. python Logging日志记录模块详解

    写在篇前   logging是Python的一个标准库,其中定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.Python logging 的配置由四个部分组成:Logger.Handl ...

  6. 使用python logging的配置

    使用python logging的配置 简介 在python中使用logging模块,对log进行配置时,可以使用配置文件,而不用再python源码中进行配置. 这样方便更改logging的配置. 使 ...

  7. python logging模块使用教程

    格式化配置: logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s [%(lin ...

  8. Python logging模块切分和轮转日志

    Python logging模块切分和轮转日志 logging 模块可以实现日志的输出和写入文件,但实际工作中,对于日志是使用不仅限于输出那么简单. logging基本使用参考:https://blo ...

  9. Python logging模块的基本使用

    Python logging模块的基本使用 logging 模块是 Python 内置的标准模块,用于输出代码日志. 一.logging 模块简介 在工作中,运行的代码量是非常大的,为了更方便的管理代 ...

最新文章

  1. 网络推广——网络推广专员面对网站收录异常要学会多角度分析
  2. 信号回勾产生的原因_电力电缆故障原因及常用检测方法
  3. linux重定向文件不存在,shell 12 21 filename重定向的含义和区别
  4. 一步一步学动画[1]:Silverlight中Animation的应用
  5. 给thinkphp加个分页样式
  6. 编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中
  7. “朝阳群众”APP上线!解读怎么做一款深入群众的应用
  8. 计算机中丢失inetcomm,模块inetcomm.dll已加载,但找不到入口点DllRegisterServer
  9. 查看电脑的CPU个数,核数,逻辑核数
  10. java io 高级,JavaSE - [10] 高级部分之IO流
  11. typedef int Myfunc(const char *,const struct stat *,int)
  12. js判断ie 火狐 还是chrome浏览器
  13. Tomcat乱码解决方法
  14. jquery 的模块化
  15. LRC软件测试自学,LRC滚动歌词制作编辑器
  16. indesign里怎么打根号_indesign 数学符号
  17. 已有虚拟磁盘多个vmdk文件导入虚拟机
  18. EXCEL快速提取中英文、数字的4个方法,总有一个适合你!
  19. 24L01配置函数详解
  20. 测试开发--java

热门文章

  1. Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法
  2. MySQL - 库表设计之IP和TIMESTAMP的处理
  3. 白话Elasticsearch51-深入聚合数据分析之text field聚合以及fielddata原理
  4. Oracle-表分析和索引分析解读
  5. linux定时导出数据库,linux 下定时导出备份oracle数据库
  6. linux printf 刷新,linux下printf中\n刷新缓冲区的疑问(已解决)
  7. linux服务器磁盘格式,linux下查看磁盘分区的文件系统格式
  8. 中过滤记录中时间_除尘滤芯如何在过滤行业中脱颖而出
  9. 系统优化怎么做-新系统上线前做什么
  10. C语言如何使用函数交换两个变量的值