Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Konfiguration der Protokollierung des Django-Protokollmoduls

Detaillierte Erläuterung der Konfiguration der Protokollierung des Django-Protokollmoduls

高洛峰
高洛峰Original
2017-02-16 17:01:021392Durchsuche

Protokolle sind in der Programmentwicklung unverzichtbar. Mithilfe von Protokollen können wir analysieren, wo die Fehler liegen und welche Auffälligkeiten vorliegen. Es ist von großem Nutzen in Produktionsumgebungen. In der Java-Entwicklung werden normalerweise Komponenten von Drittanbietern wie log4j und logback verwendet. Der folgende Artikel stellt hauptsächlich die relevanten Informationen zur Protokollierung des Django-Protokollmoduls vor. Freunde, die es benötigen, können darauf zurückgreifen.

Vorwort

Django ist in Bezug auf die Protokollausgabeinformationen sehr vollständig. Die Anforderungsinformationen, die Einstellungskonfiguration und die Trackback-Informationen sind alle verfügbar, was für uns ausreicht debuggen. In einer Online-Umgebung ist es jedoch sehr unsicher (offengelegter Code), wenn Benutzer diese Informationen sehen dürfen. Daher müssen wir Debug online deaktivieren, können die Debugging-Informationen jedoch nicht wegwerfen. Dies erfordert die Verwendung des Protokollierungsmoduls.

Das Protokollierungsmodul ist eigentlich ein Python-Modul und bietet in Django viel lokalisierte Unterstützung.

Logger verstehen

Zunächst müssen Sie die Arbeit der Protokollierung verstehen. Es gibt vier Hauptelemente darin: Formatierer, Filter und Prozessor-Handler . Log-Instanz-Logger.

Verarbeitungsablauf

   formatter
logger ----> handler ----------------> files, emails
    filter

Der Verarbeitungsablauf ist wie folgt. Erstens im Code. Was wir erhalten, ist eine Logger-Instanz, und wir verwenden diese Instanz, um Informationen aufzuzeichnen.

# 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!')

Dann übergibt der Logger namens Django die Informationen an den entsprechenden Handler, und der Handler verarbeitet die Informationen mithilfe von Formatierer und Filter und Senden Sie es. Loggen Sie es ein (speichern Sie es in einer Datei, in einer Datenbank oder senden Sie es per E-Mail).

Im Allgemeinen kann der Handler send_email, error_file und andere Verarbeitungsmethoden sein und der Handler kann im Logger wiederverwendet werden. Beispielsweise verwendet unser Django-Prozessor zwei Prozessoren, send_email und error_file, und der Anforderungsprozessor verwendet zwei Prozessoren, error_file und info_file. Logger und Handler können als Viele-zu-Viele-Beziehung verstanden werden, hehe.

Konfigurationsmethode

Die Protokollierung kann in verschiedenen Formaten in Python konfiguriert werden, z. B. .conf, .ini usw.

In Django schreiben wir die Protokollierungskonfiguration in die Einstellungen. Die entsprechende Konfiguration und Erklärung lauten wie folgt (nur als Referenz).

#管理员邮箱
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,
 },
 } 
}

In der obigen Konfigurationsdatei gibt es drei Protokollprozessoren. Dies sind:

  1. 'django.request': Djangos Anfrage zeichnet Fehler automatisch auf, wenn sie auftreten, und verwendet dann debug, um die Informationen in einer Datei aufzuzeichnen, und mail_admins, um die Informationen an zu senden Der Administrator per E-Mail. Die E-Mail-Funktionalität hier ist großartig! Es handelt sich nicht um eine reine Textnachricht, sondern um eine HTML-Datei, genau wie die Fehlerseite, die wir im Browser sehen! Um die E-Mail-Funktion normal nutzen zu können, müssen Sie die oben genannten E-Mail-Absenderinformationen wie ich konfigurieren. Ich bin direkt zu NetEase gegangen, um eine E-Mail-Adresse zu beantragen. Achten Sie besonders auf drei Punkte: 1. Gehen Sie unbedingt zum E-Mail-Dienstanbieter, um den SMTP-Dienst zu aktivieren. 2. Verschiedene E-Mail-Dienstanbieter können einige spezielle Einstellungen haben. NetEase gibt Ihnen beispielsweise einen Client-Autorisierungscode das Passwort und es ist nicht das Login-Passwort für die Webseite. 3. Achten Sie darauf, ob der Dienstanbieter Einschränkungen hinsichtlich der Sendehäufigkeit hat.

  2. ‘django‘: Verwenden Sie den Konsolenprozessor, um Informationen auszugeben. Sie können diesen Prozessor während der Entwicklung verwenden (Was? Drucken? Zu niedrig!)

  3. Siehe Kommentare zum letzten Prozessor.

Vergessen Sie abschließend nicht, der Protokollpfadantwort die Erlaubnis zu erteilen. Beispielsweise muss der Apache2-Server die Schreibberechtigung für WWW-Daten erteilen:

sudo chown -R [yourname]:www-data [log]
sudo chmod -R g+s [log]

Weitere Informationen zur Konfiguration der Django-Protokollmodulprotokollierung finden Sie hier Achten Sie auf die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn