


Explication détaillée de la configuration de la journalisation du module de journalisation Django
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
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!')
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, }, } }
Dans le fichier de configuration ci-dessus, il y a trois processeurs de journaux. Ce sont :
'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.
'django' : utilisez le processeur de la console pour afficher des informations. Vous pouvez utiliser ce processeur pendant le développement (Quoi ? Imprimer ? Trop faible !)
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]
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 !

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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. ...

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 ...

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 ...

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 ...

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

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 ...

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 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 ...
