python的logging模块

综合编程 2017-12-31

一 logging模块定义了5种日志等级,依次从低到高:

  1. DEBUG:用于调试目的的底层系统信息
  2. INFO:普通系统信息
  3. WARNING:表示出现一个较小问题
  4. ERROR:表示出现一个错误问题
  5. CRITICAL:表示出现一个致命问题

默认等级是WARNING,即低于WARNING等级的日志不会显示。

In [1]: import logging

In [2]: logging.info("aaaa")

In [3]: logging.warning("bbbb")
WARNING:root:bbbb

二 将日志记录到文件中

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(pathname)s %(filename)s [line:%(lineno)s] %(levelname)s %(message)s',
                    filename='/tmp/test.log',
                    filemode='w')

logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

文件test.log的内容:

2017-12-31 14:30:01,793 example_logging.py example_logging.py [line:8] DEBUG debug message
2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:9] INFO info message
2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:10] WARNING warning message
2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:11] ERROR error message
2017-12-31 14:30:01,794 example_logging.py example_logging.py [line:12] CRITICAL critical message

level:设置日志等级

format:日志输出格式:

  • %(levelno)s: 打印日志级别的数值
  • %(levelname)s: 打印日志级别名称
  • %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
  • %(filename)s: 打印当前执行程序名
  • %(funcName)s: 打印日志的当前函数
  • %(lineno)d: 打印日志的当前行号
  • %(asctime)s: 打印日志的时间
  • %(thread)d: 打印线程ID
  • %(threadName)s: 打印线程名称
  • %(process)d: 打印进程ID
  • %(message)s: 打印日志信息

filename:保存的文件名称

filemode:文件打开模式

三 日志的高级用法

  1. python日志系统是由4部分组成:
    1. logger:
      Logger 为日志系统的入口。
      每个logger命名都是bucket,你可以向这个bucket写入需要处理的消息,
      当一条消息传递给logger 时,消息的日志级别将与logger 的日志级别进行比较。
      如果消息的日志级别大于等于logger 的日志级别,该消息将会往下继续处理。 如果小于,该消息将被忽略。




    2. Handler:Handler 决定如何处理logger 中的每条消息。
      它表示一个详细的日志行为,例如将消息写到屏幕上、写到文件中或者写到网络socket。
      与logger 一样,handler 也有一个日志级别。 如果消息的日志级别小于handler 的级别,handler 将忽略该消息。



    3. Filter:Filter 用于对从logger 传递给handler 的日志记录进行额外的控制。

    4. Formatter:格式控制
  2. 简单例子(将日志结果输出到控制台)
import logging

# 创建 一个logger,级别为DEBUG
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# 创建 一个 handler,用于处理控制台输出,处理级别为DEBUG
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# 设置输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 给ch添加输出格式
ch.setFormatter(formatter)

# 将ch添加到logger上
logger.addHandler(ch)

logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

运行结果

$ python simple_logging_config.py
2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message
2005-03-19 15:38:55,979 - simpleExample - INFO - info message
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message
Python_博客园

责编内容by:Python_博客园 (源链)。感谢您的支持!

您可能感兴趣的

7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品... 在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取。比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可能会包含加密密钥等,所以如果想自己构造Ajax参数,还是比较困难的。对于这种页面,最方便快捷的抓取方...
Saiorm — Python 实现的支持链式调用的数据库工具... saiorm是一款简单易用的数据库工具,支持链式调用,学习成本极低。 方法 insert, select, update, delete, execute, executemany, increase, decrease 方法应在链式调用的最后执行,对数据库的操作会...
MonkeyType 是如何获得运行时类型的 MonkeyType 项目能够从运行时收集函数参数和返回值的类型,以类型注解的方式添加到 Python 代码中。是不是感觉好爽,不过需要 Python 3.6+ 才行 How to use 先来看一下如何使用 # some/module.py def add(a, b): ...
从能做什么到如何去做,一文带你快速掌握Python编程基础与实战... 摘要:Python语言的教程虽然随处可见,但是忙于日常业务/学习的你或许:一直想要“找个时间学一点”,但是又不知道该从何下手?本文将从Python能做什么,如何学习Python以及Python的基础知识为你的Python之路点上一盏明灯。 本文内容根据演讲视频以及PPT整理而成。 本文的分享...
宅男福音DeepFake进阶版!基于位置映射图网络进行3D人脸重建... 策划编辑 | Natalie 作者 | Favio Vázquez 译者 | 郝毅 编辑 | Natalie AI 前线导读: 位置映射图网络(PRN)是一种端到端的使用联合回归解决稠密排列和 3D 人脸重建的方法。本文是 AI 前线的第 36 篇论文...