Maison  >  Article  >  Java  >  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

高洛峰
高洛峰original
2017-02-16 17:01:021392parcourir

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 :

  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]

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