最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?scrapy框架的日志文件問(wèn)題

 更新時(shí)間:2023年08月12日 10:38:29   作者:小胖_@  
這篇文章主要介紹了python?scrapy框架的日志文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

scrapy框架中的常用日志配置

  • LOG_FILE : 日志輸出文件,如果為None,日志信息會(huì)打印在控制臺(tái);
  • LOG_ENABLED: 是否啟用日志,默認(rèn)True;
  • LOG_ENCODING : 日志編碼,默認(rèn)utf-8;
  • LOG_LEVEL : 日志等級(jí),默認(rèn)debug;
  • LOG_FORMAT : 日志格式;
  • LOG_DATEFORMAT : 日志日期格式;
  • LOG_STDOUT : 日志標(biāo)椎輸出,默認(rèn)False,如果是True所有標(biāo)椎輸出都將寫入日志中;
  • LOG_SHORT_NAMES : 短日志名,默認(rèn)False,如果是True將不輸出組件名。

日志級(jí)別

  • CRITICAT — 嚴(yán)重錯(cuò)誤
  • ERROR — 一般錯(cuò)誤
  • WARNING — 警告信息
  • INFO — 一般信息
  • DEBUG — 調(diào)試信息

級(jí)別:

CRITICAT>ERROR>WARNING>INFO>DEBUG

logging模塊常用format格式說(shuō)明

  • %(levelno)s: 打印日志級(jí)別的數(shù)值
  • %(levelname)s: 打印日志級(jí)別名稱
  • %(pathname)s: 打印當(dāng)前執(zhí)行程序的路徑,其實(shí)就是sys.argv[0]
  • %(filename)s: 打印當(dāng)前執(zhí)行程序名
  • %(funcName)s: 打印日志的當(dāng)前函數(shù)
  • %(lineno)d: 打印日志的當(dāng)前行號(hào)
  • %(asctime)s: 打印日志的時(shí)間
  • %(thread)d: 打印線程ID
  • %(threadName)s: 打印線程名稱
  • %(process)d: 打印進(jìn)程ID
  • %(message)s: 打印日志信息

日期格式

  • %y 兩位數(shù)的年份表示(00-99)
  • %Y 四位數(shù)的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月內(nèi)中的一天(0-31)
  • %H 24小時(shí)制小時(shí)數(shù)(0-23)
  • %I 12小時(shí)制小時(shí)數(shù)(01-12)
  • %M 分鐘數(shù)(00=59)
  • %S 秒(00-59)
  • %a 本地簡(jiǎn)化星期名稱
  • %A 本地完整星期名稱
  • %b 本地簡(jiǎn)化的月份名稱
  • %B 本地完整的月份名稱
  • %c 本地相應(yīng)的日期表示和時(shí)間表示
  • %j 年內(nèi)的一天(001-366)
  • %p 本地A.M.或P.M.的等價(jià)符
  • %U 一年中的星期數(shù)(00-53)星期天為星期的開始
  • %w 星期(0-6),星期天為星期的開始
  • %W 一年中的星期數(shù)(00-53)星期一為星期的開始
  • %x 本地相應(yīng)的日期表示
  • %X 本地相應(yīng)的時(shí)間表示
  • %Z 當(dāng)前時(shí)區(qū)的名稱
  • %% %號(hào)本身

日志配置的常用形式(代碼)

LOG_FILE = "日志文件名"
LOG_LEVEL = "日志級(jí)別" 
# 顯示日志級(jí)別以上的日志信息(包括自己)
LOG_DATEFORMAT = "%Y-%m-%d %H:%M:%S"
LOG_FORMAT = "%(asctime)s-%(levelname)s-%(filename)s-%(funcName)s-%(message)s-%(lineno)d"

scrapy中爬蟲使用日志

在爬蟲文件中使用日志:

1.導(dǎo)包 logging

import logging

2.在自定義custom_settings中添加日志基本配置;

custom_settings = {
	"LOG_FILE": "a.log",
    "LOGLEVEL": "INFO"
}

3.因?yàn)樵趕crapy框架中,爬蟲文件直接self打點(diǎn)調(diào)用log(),將信息添加到日志文件中;

# logging.INFO 日志級(jí)別
self.log("準(zhǔn)備采集導(dǎo)航條",logging.INFO)

4.在日志文件中添加日志錯(cuò)誤信息,需要對(duì)錯(cuò)誤信息進(jìn)行轉(zhuǎn)換,因?yàn)閘og()只能添加字符串日志信息。

基本代碼實(shí)現(xiàn)

try:
    a = []
    print(a[0])
except Exception as e:
    # self.log(str(e), logging.ERROR)
    self.log(f"{repr(e)},錯(cuò)誤在{sys._getframe().f_code.co_filename}的{sys._getframe().f_lineno}行", logging.ERROR)
    # self.log(e.message, logging.ERROR)
    # self.log(traceback.print_exc(), logging.ERROR)
    # self.log(traceback.format_exc(), logging.ERROR)

scrapy 中管道使用文件

1.導(dǎo)包 logging

import logging

2.配置日志中名字

log = logging.getLogger("a.log")

在這里插入圖片描述

3.添加日志文件信息

log.info("日志存儲(chǔ)信息")
log.debug("日志存儲(chǔ)信息")
log.critical("日志存儲(chǔ)信息")
log.error("日志存儲(chǔ)信息")
log.warning("日志存儲(chǔ)信息")

自定義日志工具類

第一個(gè)

  • logger.py
#!_*_coding:utf-8_*_
import logging
import os
LOG_LEVEL = logging.INFO
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 自定義日志類型
LOG_TYPES = {
    'transaction': 'transactions.log',
    'access': 'access.log',
}
def log(log_type):
    """
    from logger.logger import log
    log_obj = log('日志名稱')
    log_obj.info("普通消息")
    log_obj.debug("調(diào)試消息")
    log_obj.warn("警告消息")
    log_obj.error("錯(cuò)誤消息")
    log_obj.critical("hello world")
    """
    log_dir = "%s/log" % (BASE_DIR)
    log_file = "%s/%s" % (log_dir, LOG_TYPES.get(log_type, log_type+".log"))
    os.makedirs(log_dir, exist_ok=True)
    # 創(chuàng)建日志對(duì)象
    logger = logging.getLogger(log_type)
    logger.setLevel(LOG_LEVEL)
    # 創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
    ch = logging.StreamHandler()
    ch.setLevel(LOG_LEVEL)
    # 創(chuàng)建一個(gè)handler,用于寫入日志文件
    fh = logging.FileHandler(log_file, encoding="utf-8")
    fh.setLevel(LOG_LEVEL)
    # 定義handler的輸出格式formatter
    """
    format參數(shù)中可能用到的格式化串:
    %(name)s Logger的名字
    %(levelno)s 數(shù)字形式的日志級(jí)別
    %(levelname)s 文本形式的日志級(jí)別
    %(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒(méi)有
    %(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
    %(module)s 調(diào)用日志輸出函數(shù)的模塊名
    %(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
    %(lineno)d 調(diào)用日志輸出函數(shù)的語(yǔ)句所在的代碼行
    %(created)f 當(dāng)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮 點(diǎn)數(shù)表示
    %(relativeCreated)d 輸出日志信息時(shí)的,自Logger創(chuàng)建以 來(lái)的毫秒數(shù)
    %(asctime)s 字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2018-07-08 16:49:45,896”。逗號(hào)后面的是毫秒
    %(thread)d 線程ID??赡軟](méi)有
    %(threadName)s 線程名。可能沒(méi)有
    %(process)d 進(jìn)程ID??赡軟](méi)有
    %(message)s用戶輸出的消息
    """
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)
    # 給logger添加handler
    logger.addHandler(ch)
    logger.addHandler(fh)
    return logger
  • 使用方法

1.導(dǎo)包

from logger import log

2.調(diào)用

log_obj = log('日志文件名')
log_obj.info("普通消息")
log_obj.debug("調(diào)試消息")
log_obj.warn("警告消息")
log_obj.error("錯(cuò)誤消息")
log_obj.critical("嚴(yán)重錯(cuò)誤信息")

第二個(gè)

logger.py

import logging
from logging import StreamHandler, FileHandler, Formatter
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler
class Logger(object):
    # log = logging.getLogger(__name__)
    filename = "123.log"
    log_format = "%(asctime)s|%(levelname)s|%(filename)s|%(funcName)s|%(message)s|%(lineno)d"
    is_file = False
    is_time = False
    @classmethod
    def log_init(cls):
        log = logging.getLogger(__name__)
        handler1 = StreamHandler()  # 輸出
        handler2 = FileHandler(cls.filename, encoding="gb2312")  # 寫入
        log.setLevel(logging.DEBUG)
        handler1.setLevel(logging.DEBUG)
        handler2.setLevel(logging.DEBUG)
        format = Formatter(cls.log_format)
        handler1.setFormatter(format)
        handler2.setFormatter(format)
        if cls.is_time:
	        # interval 是指等待多少個(gè)單位when的時(shí)間后,Logger會(huì)自動(dòng)重建文件,當(dāng)然,這個(gè)文件的創(chuàng)建取決于filename+suffix,若這個(gè)文件跟之前的文件有重名,則會(huì)自動(dòng)覆蓋掉以前的文件,所以有些情況suffix要定義的不能因?yàn)閣hen而重復(fù)。
			# backupCount 是保留日志個(gè)數(shù)。默認(rèn)的0是不會(huì)自動(dòng)刪除掉日志。若設(shè)3,則在文件的創(chuàng)建過(guò)程中庫(kù)會(huì)判斷是否有超過(guò)這個(gè)3,若超過(guò),則會(huì)從最先創(chuàng)建的開始刪除。
            filehandler = logging.handlers.TimedRotatingFileHandler("a" + cls.filename, when='S', interval=1, backupCount=3)
            # 設(shè)置后綴名稱,跟strftime的格式一樣  when設(shè)置的是S這個(gè)結(jié)尾必須是S.log
            filehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"
            filehandler.setFormatter(format)
            log.addHandler(filehandler)
        if cls.is_file:
            # 寫入文件,如果文件超過(guò)100個(gè)Bytes,僅保留5個(gè)文件。
            handler = logging.handlers.RotatingFileHandler(cls.filename, maxBytes=100, backupCount=5)
            # 設(shè)置后綴名稱,跟strftime的格式一樣
            handler.setFormatter(format)
            log.addHandler(handler)
        log.addHandler(handler1)
        log.addHandler(handler2)
        return log
    @classmethod
    def debug(cls, message):
        log = cls.log_init()
        log.debug(message)
    @classmethod
    def warning(cls, message):
        log = cls.log_init()
        log.warning(message)
    @classmethod
    def error(cls, message):
        log = cls.log_init()
        log.error(message)
    @classmethod
    def critical(cls, message):
        log = cls.log_init()
        log.critical(message)
    @classmethod
    def info(cls, message):
        log = cls.log_init()
        log.info(message)
  • 使用方法

1.導(dǎo)包

from logger import Logger

2.調(diào)用

Logger.filename = "a.log"  # 設(shè)置日志文件名,如果不設(shè)置,默認(rèn)"123.log"
Logger.log_format = ""  # 設(shè)置日志文件顯示格式
Logger.is_file = True   # 設(shè)置基于文件大小日志存儲(chǔ),默認(rèn)存儲(chǔ)一個(gè)日志文件
Logger.is_time = True   # 設(shè)置基于時(shí)間保存日志,默認(rèn)不設(shè)置
Logger.info("普通消息")
Logger.debug("調(diào)試消息")
Logger.warn("警告消息")
Logger.error("錯(cuò)誤消息")
Logger.critical("嚴(yán)重錯(cuò)誤信息")

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一句話理解pyside6的信號(hào)和槽機(jī)制

    一句話理解pyside6的信號(hào)和槽機(jī)制

    本文介紹了PySide6信號(hào)與槽機(jī)制的核心概念和使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • Python繪制正二十面體圖形示例

    Python繪制正二十面體圖形示例

    正二十面體由20個(gè)小的正三角形面組成,每個(gè)頂點(diǎn)周圍有?5?個(gè)頂點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Python繪制正二十面體圖形的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python常問(wèn)的100個(gè)面試問(wèn)題匯總(下篇)

    Python常問(wèn)的100個(gè)面試問(wèn)題匯總(下篇)

    這篇文章主要介紹了Python常問(wèn)的100個(gè)面試問(wèn)題匯總(下篇),文章內(nèi)容詳細(xì),簡(jiǎn)單易懂,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2023-01-01
  • 使用Python實(shí)現(xiàn)Word文檔的深度克隆的完整代碼

    使用Python實(shí)現(xiàn)Word文檔的深度克隆的完整代碼

    在日常辦公場(chǎng)景中,我們經(jīng)常需要對(duì) Word 文檔進(jìn)行內(nèi)容提取、樣式復(fù)制或格式轉(zhuǎn)換,本文將詳細(xì)介紹如何使用 python-docx 庫(kù)實(shí)現(xiàn) Word 文檔的深度克隆功能,包括段落樣式、表格格式、分頁(yè)符等元素的完整復(fù)制,需要的朋友可以參考下
    2025-05-05
  • Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)

    Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)

    本文主要介紹了Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié),用戶發(fā)送請(qǐng)求時(shí)攜帶的參數(shù)后端需要使用,而不同的發(fā)送參數(shù)的方式對(duì)應(yīng)了不同的提取參數(shù)的方式,本文就詳細(xì)的介紹一下
    2021-08-08
  • Python 錯(cuò)誤和異常小結(jié)

    Python 錯(cuò)誤和異常小結(jié)

    這不是一篇關(guān)于Python異常的全面介紹的文章,這只是在學(xué)習(xí)Python異常后的一篇筆記式的記錄和小結(jié)性質(zhì)的文章
    2013-10-10
  • OpenCV圖像顏色反轉(zhuǎn)算法詳解

    OpenCV圖像顏色反轉(zhuǎn)算法詳解

    這篇文章主要介紹了OpenCV圖像顏色反轉(zhuǎn)算法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python實(shí)現(xiàn)數(shù)據(jù)地址實(shí)體抽取

    Python實(shí)現(xiàn)數(shù)據(jù)地址實(shí)體抽取

    大家好,本篇文章主要講的是Python實(shí)現(xiàn)數(shù)據(jù)地址實(shí)體抽取,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 如何獲取Python簡(jiǎn)單for循環(huán)索引

    如何獲取Python簡(jiǎn)單for循環(huán)索引

    這篇文章主要介紹了如何獲取Python簡(jiǎn)單for循環(huán)索引,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python編程開發(fā)之類型轉(zhuǎn)換convert實(shí)例分析

    python編程開發(fā)之類型轉(zhuǎn)換convert實(shí)例分析

    這篇文章主要介紹了python編程開發(fā)之類型轉(zhuǎn)換convert用法,結(jié)合實(shí)例形式分析了Python中常見(jiàn)的數(shù)據(jù)類型及類型轉(zhuǎn)換convert的具體使用方法,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

贵德县| 淄博市| 平武县| 宜良县| 固阳县| 左权县| 砀山县| 谷城县| 资兴市| 夹江县| 定陶县| 邮箱| 北辰区| 杭锦旗| 涿州市| 青冈县| 通河县| 涿鹿县| 浦北县| 定陶县| 陇西县| 上虞市| 淮滨县| 曲麻莱县| 尼玛县| 屯昌县| 翼城县| 德江县| 石景山区| 修水县| 陇南市| 固安县| 许昌县| 松滋市| 儋州市| 雷波县| 伊通| 依兰县| 黄浦区| 玉田县| 玉树县|