Maison Java javaDidacticiel Explication détaillée de la configuration de la journalisation du module de journalisation Django

Explication détaillée de la configuration de la journalisation du module de journalisation Django

Feb 16, 2017 pm 05:01 PM

Les journaux sont indispensables dans le développement de programmes. Grâce aux journaux, nous pouvons analyser où se trouvent les erreurs et quelles sont les anomalies. Il est d’une grande utilité dans les environnements de production. Dans le développement Java, des composants tiers tels que log4j et logback sont généralement utilisés. L'article suivant présente principalement les informations pertinentes sur la journalisation du module de journalisation Django. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Django est très complet en termes d'informations de sortie de journal, y compris les informations de demande, la configuration des paramètres et les informations de rétrolien, ce qui nous suffit pour déboguer. Cependant, dans un environnement en ligne, il est très dangereux (code exposé) que les utilisateurs soient autorisés à voir ces informations. Par conséquent, nous devons désactiver le débogage en ligne, mais nous ne pouvons pas supprimer les informations de débogage. Cela nécessite l'utilisation du module de journalisation.

Le module de journalisation est en fait un module Python et bénéficie de nombreux supports localisés dans Django.

Comprendre Logger

Tout d'abord, vous devez comprendre le travail de journalisation. Il contient quatre éléments principaux : le formateur, le filtre et le gestionnaire de processeur. . Enregistreur d'instance de journal.

Flux de traitement

   formatter
logger ----> handler ----------------> files, emails
    filter
Copier après la connexion

Le flux de traitement est comme ceci. D’abord dans le code. Ce que nous obtenons est une instance d'enregistreur, et nous utilisons cette instance pour enregistrer des informations.

# import the logging library
import logging
 
# Get an instance of a logger
logger = logging.getLogger('django')
 
def my_view(request, arg1, arg):
 ...
 if bad_mojo:
 # Log an error message
 logger.error('Something went wrong!')
Copier après la connexion

Ensuite, l'enregistreur nommé Django transmettra les informations au gestionnaire correspondant, et le gestionnaire traitera les informations à l'aide d'un formateur et d'un filtre, et soumettez-le dans le journal (enregistrez-le dans un fichier, une base de données ou envoyez-le par e-mail).

De manière générale, le gestionnaire peut être send_email, error_file et d'autres méthodes de traitement, et le gestionnaire peut être réutilisé dans l'enregistreur. Par exemple, notre processeur Django utilise deux processeurs, send_email et error_file, et le processeur de requête utilise deux processeurs, error_file et info_file et le gestionnaire peut être compris comme une relation plusieurs-à-plusieurs, hehe.

Méthode de configuration

La journalisation peut être configurée dans différents formats en Python, tels que .conf, .ini, etc.

Dans Django, nous écrivons la configuration de la journalisation dans les paramètres. La configuration et l'explication correspondantes sont les suivantes (pour référence uniquement).

#管理员邮箱
ADMINS = (
 ('laixintao','*******@163.com'),
)
 
#非空链接,却发生404错误,发送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = ADMINS
 
#Email设置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST= 'smtp.163.com'#QQ邮箱SMTP服务器(邮箱需要开通SMTP服务)
EMAIL_PORT= 25 #QQ邮箱SMTP服务端口
EMAIL_HOST_USER = '**********@163.com' #我的邮箱帐号
EMAIL_HOST_PASSWORD = '**************' #授权码
EMAIL_SUBJECT_PREFIX = 'website' #为邮件标题的前缀,默认是'[django]'
EMAIL_USE_TLS = True #开启安全链接
DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #设置发件人
 
#logging日志配置
LOGGING = {
 'version': 1,
 'disable_existing_loggers': True,
 'formatters': {#日志格式 
 'standard': {
  'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} 
 },
 'filters': {#过滤器
 'require_debug_false': {
  '()': 'django.utils.log.RequireDebugFalse',
  }
 },
 'handlers': {#处理器
 'null': {
  'level': 'DEBUG',
  'class': 'logging.NullHandler',
 },
 'mail_admins': {#发送邮件通知管理员
  'level': 'ERROR',
  'class': 'django.utils.log.AdminEmailHandler',
  'filters': ['require_debug_false'],# 仅当 DEBUG = False 时才发送邮件
  'include_html': True,
 },
 'debug': {#记录到日志文件(需要创建对应的目录,否则会出错)
  'level':'DEBUG',
  'class':'logging.handlers.RotatingFileHandler',
  'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志输出文件
  'maxBytes':1024*1024*5,#文件大小 
  'backupCount': 5,#备份份数
  'formatter':'standard',#使用哪种formatters日志格式
 },
 'console':{#输出到控制台
  'level': 'DEBUG',
  'class': 'logging.StreamHandler',
  'formatter': 'standard',
 },
 },
 'loggers': {#logging管理器
 'django': {
  'handlers': ['console'],
  'level': 'DEBUG',
  'propagate': False 
 },
 'django.request': {
  'handlers': ['debug','mail_admins'],
  'level': 'ERROR',
  'propagate': True,
 },
 # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件
 'django.security.DisallowedHost': {
  'handlers': ['null'],
  'propagate': False,
 },
 } 
}
Copier après la connexion

Dans le fichier de configuration ci-dessus, il y a trois processeurs de journaux. Ce sont :

  1. 'django.request' : la requête de Django enregistrera automatiquement les erreurs lorsqu'elles se produisent, puis utilisera debug pour enregistrer les informations dans un fichier, et mail_admins pour envoyer les informations à l'administrateur par email. La fonctionnalité de courrier électronique ici est géniale ! Il ne s'agit pas d'un message en texte brut, mais d'un fichier html, exactement le même que la page d'erreur que nous voyons dans le navigateur ! Pour utiliser normalement la fonction de courrier électronique, vous devez configurer les informations ci-dessus sur l'expéditeur du courrier électronique comme je l'ai fait. Je suis allé directement sur NetEase pour demander une adresse e-mail. Portez une attention particulière à trois points : 1. Assurez-vous de vous adresser au fournisseur de services de messagerie pour activer le service SMTP ; 2. Différents fournisseurs de services de messagerie peuvent avoir des paramètres spéciaux. Par exemple, NetEase vous donnera un code d'autorisation client, qui est. le mot de passe, et ce n'est pas le mot de passe de connexion à la page Web. 3. Vérifiez si le fournisseur de services a des restrictions sur la fréquence d'envoi.

  2. 'django' : utilisez le processeur de la console pour afficher des informations. Vous pouvez utiliser ce processeur pendant le développement (Quoi ? Imprimer ? Trop faible !)

  3. Voir les commentaires pour le dernier processeur.

Enfin, n'oubliez pas d'autoriser la réponse du chemin du journal. Par exemple, pour le serveur Apache2, vous devez donner l'autorisation d'écriture à www-data :

sudo chown -R [yourname]:www-data [log]
sudo chmod -R g+s [log]
Copier après la connexion

Pour des informations plus détaillées sur la configuration de la journalisation du module de journalisation de Django , veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Apr 19, 2025 pm 04:51 PM

Dépannage et solutions au logiciel de sécurité de l'entreprise qui fait que certaines applications ne fonctionnent pas correctement. De nombreuses entreprises déploieront des logiciels de sécurité afin d'assurer la sécurité des réseaux internes. ...

Comment simplifier les problèmes de cartographie des champs dans l'amarrage du système à l'aide de mapstruct? Comment simplifier les problèmes de cartographie des champs dans l'amarrage du système à l'aide de mapstruct? Apr 19, 2025 pm 06:21 PM

Le traitement de la cartographie des champs dans l'amarrage du système rencontre souvent un problème difficile lors de l'exécution d'amarrage du système: comment cartographier efficacement les champs d'interface du système a ...

Comment obtenir élégamment des noms de variables de classe d'entité pour créer des conditions de requête de base de données? Comment obtenir élégamment des noms de variables de classe d'entité pour créer des conditions de requête de base de données? Apr 19, 2025 pm 11:42 PM

Lorsque vous utilisez MyBatis-Plus ou d'autres cadres ORM pour les opérations de base de données, il est souvent nécessaire de construire des conditions de requête en fonction du nom d'attribut de la classe d'entité. Si vous manuellement à chaque fois ...

Comment convertir les noms en nombres pour implémenter le tri et maintenir la cohérence en groupes? Comment convertir les noms en nombres pour implémenter le tri et maintenir la cohérence en groupes? Apr 19, 2025 pm 11:30 PM

Solutions pour convertir les noms en nombres pour implémenter le tri dans de nombreux scénarios d'applications, les utilisateurs peuvent avoir besoin de trier en groupe, en particulier en un ...

Comment Intellij Idea identifie-t-elle le numéro de port d'un projet de démarrage de printemps sans publier un journal? Comment Intellij Idea identifie-t-elle le numéro de port d'un projet de démarrage de printemps sans publier un journal? Apr 19, 2025 pm 11:45 PM

Commencez le printemps à l'aide de la version IntelliJideaultimate ...

Comment convertir en toute sécurité les objets Java en tableaux? Comment convertir en toute sécurité les objets Java en tableaux? Apr 19, 2025 pm 11:33 PM

Conversion des objets et des tableaux Java: Discussion approfondie des risques et des méthodes correctes de la conversion de type de distribution De nombreux débutants Java rencontreront la conversion d'un objet en un tableau ...

Comment obtenir élégamment les conditions de requête de création de nom de variable de classe d'entité lors de l'utilisation de tkmybatis pour la requête de base de données? Comment obtenir élégamment les conditions de requête de création de nom de variable de classe d'entité lors de l'utilisation de tkmybatis pour la requête de base de données? Apr 19, 2025 pm 09:51 PM

Lorsque vous utilisez TkMyBatis pour les requêtes de base de données, comment obtenir gracieusement les noms de variables de classe d'entité pour créer des conditions de requête est un problème courant. Cet article épinglera ...

Comment utiliser la solution Redis Cache pour réaliser efficacement les exigences de la liste de classement des produits? Comment utiliser la solution Redis Cache pour réaliser efficacement les exigences de la liste de classement des produits? Apr 19, 2025 pm 11:36 PM

Comment la solution de mise en cache Redis réalise-t-elle les exigences de la liste de classement des produits? Pendant le processus de développement, nous devons souvent faire face aux exigences des classements, comme l'affichage d'un ...

See all articles