社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python基础 logging模块使用(一)

伊洛的小屋 • 5 年前 • 97 次点击  
一. 日志的作用
  • 日志是对软件执行时所发生事件的一种追踪方式,无论是开发人员还是测试人员,日志的重要的作用应该是不言而喻的;不但可以帮助开发定位缺陷解决问题,也可以辅助在测试过程中的测试工程师定位缺陷。
    作为测试人员更应该重视日志,无论是单元测试去捕获 Traceback ,还是做 接口/UI自动化 都应当输出有必要的日志

本文首发自伊洛的个人博客: https://yiluotalk.com ,欢迎关注并查看更多内容!!!

  • 那么 python 中,怎么可以做到一个算是标准的日志记录呢? 很多人会使用 print 直接输出的方式,但是其实这事极为不规范的做法,来看看官网上怎么说
    截图来自官网
  • 今天就来简单的介绍下 python logging 模块的基本使用方法
二. 日志的级别
  • 5个级别分别是,可以注意到源码中, WARN = WARNING ,后续使用中两者是一个意思
    截图来自官网
  • 每个级别都有对应的一个值


三. logging的工作流程
  • 还是先来看看官网上的流程图


    截图来自官网
  • 可以看到以下几种类型, Logger、LogRecord、Filter、Handler、Formatter
  1. Logger :是进行日志记录时创建的对象
  2. LogRecord :日志记录器,将日志传到相应的处理器处理
  3. Handler :即用来处理日志记录的类
  4. Filter :过滤器
  5. Formatter :格式化器, 指明了最终输出中日志记录的布局
四. 简单的例子
# 伊洛Yiluo
# https://yiluotalk.com
import logging

logging.debug('调试信息')
logging.info('信息消息')
logging.warning('错误:config file %s not found', 'server.conf')
logging.error('发生错误')
logging.critical('关键错误')
  • 看以下输出结果
WARNING:root:错误:config file server.conf not found
ERROR:root:发生错误
CRITICAL:root:关键错误

Process finished with exit code 0
五. basicConfig() 使用方法
  • basicConfig() 主要做一些基础的配置
  • 我们将日志的结果输出到一个名为 "test.log" 的文件
# 伊洛Yiluo
# https://yiluotalk.com
import logging

logging.basicConfig(filename="test.log", filemode="w", level=logging.DEBUG)
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
  • 打开 "test.log" 文件
DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
  • filename :即日志输出的文件名
  • filemode :这个是指定日志文件的写入方式
  • format :指定日志信息的输出格式
  • datefmt :指定时间的输出格式
  • level :指定日志输出的类别
六. 自定义 Logger
  • 定义一个 Logger ,名字为 test_log , 通常默认为 __name__
# 伊洛Yiluo
# https://yiluotalk.com
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('test_log')

logger.info('info log1')
logger.debug('debug log')
logger.warning('warning log')
logger.info('info log2')
logger.info('info log3')
logger.critical('critical log')
  • 查看文件的日志结果
2020-02-13 09:49:51,040 - test_log - INFO - info log1
2020-02-13 09:49:51,040 - test_log - WARNING - warning log
2020-02-13 09:49:51,040 - test_log - INFO - info log2
2020-02-13 09:49:51,040 - test_log - INFO - info log3
2020-02-13 09:49:51,040 - test_log - CRITICAL - critical log
七. 设置等级
  • 设置等级为 WARNING ,打印出包括这个等级及这个等级之上级别的日志
# 伊洛Yiluo
# https://yiluotalk.com
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('test_log')
logger.setLevel(level=logging.WARNING)

logger.info('info log1')
logger.debug('debug log')
logger.warning('warning log')
logger.info('info log2')
logger.info('info log3')
logger.critical('critical log')
  • 如下按照等级打印出了日志的信息
2020-02-13 10:04:57,325 - test_log - WARNING - warning log
2020-02-13 10:04:57,325 - test_log - CRITICAL - critical log

Process finished with exit code 0

八. Handler 的使用
  • 重新记录一个日志的文件名为 'test_log.log'
# 伊洛Yiluo
# https://yiluotalk.com
import logging

logger = logging.getLogger('test_log')
logger.setLevel(level=logging.DEBUG)
handler = logging.FileHandler('test_log.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info('info log1')
logger.debug('debug log')
logger.warning('warning log')
logger.info('info log2')
logger.info('info log3')
logger.critical('critical log')
  • 查看日志文件的结果为
2020-02-13 10:44:55,888 - test_log - INFO - info log1
2020-02-13 10:44:55,888 - test_log - DEBUG - debug log
2020-02-13 10:44:55,889 - test_log - WARNING - warning log
2020-02-13 10:44:55,889 - test_log - INFO - info log2
2020-02-13 10:44:55,889 - test_log - INFO - info log3
2020-02-13 10:44:55,889 - test_log - CRITICAL - critical log
九. 多个handler
  • 一个 handler 输出到 控制台 ,一个 handler 输出到日志文件
# 伊洛Yiluo
# https://yiluotalk.com
import logging
import sys

logger = logging.getLogger('test_log')
logger.setLevel(level=logging.INFO)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 输出到控制台的handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(level=logging.INFO)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)

# 输出到文件的handler
file_handler = logging.FileHandler('test_log.log')
file_handler.setLevel(level=logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)


logger.info('info log1')
logger.debug('debug log')
logger.warning('warning log')
logger.info('info log2')
logger.info('info log3')
logger.critical('critical log')

  • 输出都控制台
2020-02-13 11:05:49,000 - test_log - INFO - info log1
2020-02-13 11:05:49,001 - test_log - WARNING - warning log
2020-02-13 11:05:49,001 - test_log - INFO - info log2
2020-02-13 11:05:49,001 - test_log - INFO - info log3
2020-02-13 11:05:49,001 - test_log - CRITICAL - critical log
  • 输出到日志
2020-02-13 11:06:54,721 - test_log - INFO - info log1
2020-02-13 11:06:54,722 - test_log - WARNING - warning log
2020-02-13 11:06:54,722 - test_log - INFO - info log2
2020-02-13 11:06:54,722 - test_log - INFO - info log3
2020-02-13 11:06:54,722 - test_log - CRITICAL - critical log
待续文件配置,配置共享等......

欢迎下方【戳一下】【点赞】
Author:伊洛Yiluo
愿你享受每一天,Just Enjoy !

关注公众号获取更多内容
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54620
 
97 次点击