Python基础 logging模块使用(一)

本文介绍了Python的logging模块,包括日志的作用、级别、工作流程,以及如何配置基础设置、自定义Logger、设置日志等级、使用Handler和处理多个Handler。通过示例代码展示了如何输出日志到控制台和文件。
摘要由CSDN通过智能技术生成

一. 日志的作用
  • 日志是对软件执行时所发生事件的一种追踪方式,无论是开发人员还是测试人员,日志的重要的作用应该是不言而喻的;不但可以帮助开发定位缺陷解决问题,也可以辅助在测试过程中的测试工程师定位缺陷。
    作为测试人员更应该重视日志,无论是单元测试去捕获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 !

关注公众号获取更多内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值