Python爬虫5.5 — scrapy框架logging模块的使用

综述

本系列文档用于对Python爬虫技术的学习进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。
Python 版本是3.7.4

本篇文章主要讲解日志模块(logging)的使用。

log 介绍

在第一篇入门文章中我们嫌打印的日志信息过多,稍微对日志设置了一下打印等价:

LOG_LEVEL = "WARNING"

仅打印WARNING等级及其以上的日志信息。

关于log等级

Scrapy提供5层logging级别:

  1. CRITICAL - 严重错误(critical)
  2. ERROR - 一般错误(regular errors)
  3. WARNING - 警告信息(warning messages)
  4. INFO - 一般信息(informational messages)
  5. DEBUG - 调试信息(debugging messages)

上述对应等级的信息我们可以分别使用对应的函数进行输出:logging.critical()logging.error()logging.warning()logging.info()logging.debug();输入等级按照设置进行输出。scrapy默认输出DEBUG等级日志。

logging.getLogger()

由于上述设置使用较为不方便,我们可以使用日志模块自带的logging.getLogger()方法进行打印日志,实例代码如下:

import scrapy
import logging

logger = logging.getLogger(__name__)

class Qsbk1SpiderSpider(scrapy.Spider):
    name = 'qsbk1_spider'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        item = {}
        for i in range(0, 10):
            item['come_from'] = 'qsbk1'
            item['data'] = i
            logger.warning(item)
            yield item

这种用法可以将是在哪个文件中输出的日志打印出来。

日志保存到本地

我们可以在setting.py中进行添加设置:

# 日志打印等级
LOG_LEVEL = "WARNING"
# 日志保存地址
LOG_FILE = './log.log'

设置了LOG_FILE之后,日志将不会在终端控制台中进行输出。

自定义logger

上述我们可以在scrapy中可以使用,但是我们如何在普通代码中进行使用呢?我们可以在项目根目录下新建一个logger.py文件,代码如下:

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%a, %d %b %Y %H:%M:%S',
    # filename='log.log', 
    filemode='w'
)  # 自定义设置日志的输出样式

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

运行即可看到相应的打印效果。

logging.basicConfig()函数各参数说明:

  • filename: 指定日志文件名
  • filemode:和file函数意义相同,指定日志文件的打开模式,‘w’或’a’
  • format:指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
  • %(levelno)s:打印日志级别的数值
  • %(levelname)s:打印日志级别名称`
  • %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
  • %(filename)s:打印当前执行程序名
  • %(funcName)s:打印日志的当前函数
  • %(lineno)d:打印日志的当前行号
  • %(asctime)s:打印日志的时间
  • %(thread)d:打印线程ID
  • %(threadName):打印线程名称
  • %(process)d:打印进程ID
  • %(message)s:打印日志信
  • datefmt:指定时间格式,同time.strftime()
  • level:设置日志级别,默认为logging.WARNING
  • stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

其他博文链接

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值