Scrapy - Journalisation

La description

Loggingsignifie le suivi des événements, qui utilise un système de journalisation intégré et définit des fonctions et des classes pour implémenter des applications et des bibliothèques. La journalisation est un matériel prêt à l'emploi, qui peut fonctionner avec les paramètres Scrapy répertoriés dans les paramètres de journalisation.

Scrapy définira certains paramètres par défaut et gérera ces paramètres à l'aide de scrapy.utils.log.configure_logging () lors de l'exécution des commandes.

Niveaux de journal

En Python, il existe cinq niveaux de gravité différents sur un message de journal. La liste suivante montre les messages de journal standard dans un ordre croissant -

  • logging.DEBUG - pour les messages de débogage (gravité la plus faible)

  • logging.INFO - pour les messages d'information

  • logging.WARNING - pour les messages d'avertissement

  • logging.ERROR - pour les erreurs régulières

  • logging.CRITICAL - pour les erreurs critiques (gravité la plus élevée)

Comment enregistrer les messages

Le code suivant montre la journalisation d'un message à l'aide de logging.info niveau.

import logging 
logging.info("This is an information")

Le message de journalisation ci-dessus peut être passé comme argument en utilisant logging.log montré comme suit -

import logging 
logging.log(logging.INFO, "This is an information")

Désormais, vous pouvez également utiliser des enregistreurs pour inclure le message à l'aide de la journalisation des assistants de journalisation pour que le message de journalisation s'affiche clairement comme suit -

import logging
logger = logging.getLogger()
logger.info("This is an information")

Il peut y avoir plusieurs enregistreurs et ceux-ci sont accessibles en obtenant leurs noms à l'aide de logging.getLogger fonction illustrée comme suit.

import logging
logger = logging.getLogger('mycustomlogger')
logger.info("This is an information")

Un enregistreur personnalisé peut être utilisé pour n'importe quel module en utilisant la variable __name__ qui contient le chemin du module indiqué comme suit -

import logging
logger = logging.getLogger(__name__)
logger.info("This is an information")

Journalisation des araignées

Chaque instance d'araignée a un logger à l'intérieur et peut être utilisé comme suit -

import scrapy 

class LogSpider(scrapy.Spider):  
   name = 'logspider' 
   start_urls = ['http://dmoz.com']  
   def parse(self, response): 
      self.logger.info('Parse function called on %s', response.url)

Dans le code ci-dessus, l'enregistreur est créé en utilisant le nom de l'araignée, mais vous pouvez utiliser n'importe quel enregistreur personnalisé fourni par Python comme indiqué dans le code suivant -

import logging
import scrapy

logger = logging.getLogger('customizedlogger')
class LogSpider(scrapy.Spider):
   name = 'logspider'
   start_urls = ['http://dmoz.com']

   def parse(self, response):
      logger.info('Parse function called on %s', response.url)

Configuration de la journalisation

Les enregistreurs ne sont pas en mesure d'afficher seuls les messages qu'ils ont envoyés. Ils ont donc besoin de «gestionnaires» pour afficher ces messages et les gestionnaires redirigeront ces messages vers leurs destinations respectives telles que les fichiers, les e-mails et la sortie standard.

En fonction des paramètres suivants, Scrapy configurera le gestionnaire pour l'enregistreur.

Paramètres de journalisation

Les paramètres suivants sont utilisés pour configurer la journalisation -

  • le LOG_FILE et LOG_ENABLED décider de la destination des messages du journal.

  • Lorsque vous définissez le LOG_ENCODING à false, il n'affichera pas les messages de sortie du journal.

  • le LOG_LEVELdéterminera l'ordre de gravité du message; les messages moins sévères seront filtrés.

  • le LOG_FORMAT et LOG_DATEFORMAT sont utilisés pour spécifier les dispositions de tous les messages.

  • Lorsque vous définissez le LOG_STDOUT à true, toutes les sorties standard et les messages d'erreur de votre processus seront redirigés vers log.

Options de ligne de commande

Les paramètres Scrapy peuvent être remplacés en passant des arguments de ligne de commande comme indiqué dans le tableau suivant -

Sr.Non Commande et description
1

--logfile FILE

Remplace LOG_FILE

2

--loglevel/-L LEVEL

Remplace LOG_LEVEL

3

--nolog

Définit LOG_ENABLED sur False

module scrapy.utils.log

Cette fonction peut être utilisée pour initialiser les valeurs par défaut de journalisation pour Scrapy.

scrapy.utils.log.configure_logging(settings = None, install_root_handler = True)

Sr.Non Paramètre et description
1

settings (dict, None)

Il crée et configure le gestionnaire de l'enregistreur racine. Par défaut, il est Aucun .

2

install_root_handler (bool)

Il spécifie d'installer le gestionnaire de journalisation racine. Par défaut, c'est True .

La fonction ci-dessus -

  • Achemine les avertissements et les enregistrements déformés via la journalisation standard Python.
  • Assigne DEBUG à Scrapy et le niveau ERROR aux enregistreurs Twisted.
  • Achemine stdout vers le journal, si le paramètre LOG_STDOUT est vrai.

Les options par défaut peuvent être remplacées à l'aide du settingsargument. Lorsque les paramètres ne sont pas spécifiés, les valeurs par défaut sont utilisées. Le gestionnaire peut être créé pour le journal racine, lorsque install_root_handler est défini sur true. S'il est défini sur false, aucune sortie de journal n'est définie. Lors de l'utilisation des commandes Scrapy, configure_logging sera appelé automatiquement et pourra s'exécuter explicitement, tout en exécutant les scripts personnalisés.

Pour configurer manuellement la sortie de la journalisation, vous pouvez utiliser logging.basicConfig() montré comme suit -

import logging 
from scrapy.utils.log import configure_logging  

configure_logging(install_root_handler = False) 
logging.basicConfig ( 
   filename = 'logging.txt', 
   format = '%(levelname)s: %(your_message)s', 
   level = logging.INFO 
)