Heim > Artikel > Backend-Entwicklung > Python-Modul: Protokollierung
Viele Programme müssen Protokolle aufzeichnen, und die in den Protokollen enthaltenen Informationen umfassen normale Programmzugriffsprotokolle und können auch Fehler, Warnungen und andere Informationsausgaben enthalten. Sie können es verwenden Speichert Protokolle in verschiedenen Formaten: Debug, Info, Warnung, Fehler und Kritisch. Schauen wir uns an, wie das Modul
verwendet wird
#logging初识 import logging logging.warning("user [James] attempted wrong password more than 3 times") logging.critical("server is down") # WARNING:root:user [James] attempted wrong password more than 3 times # CRITICAL:root:server is downDer obige Code ist der einfachste Weg. Der Inhalt in Klammern ist die gedruckte Information, und die Methode nach der Protokollierung ist die Protokollebene. Schauen wir uns die detaillierten Informationen der fünf Protokollierungsebenen an
Wenn Sie das Protokoll in eine Datei schreiben möchten, ist es auch ganz einfach:
logging.basicConfig definiert den Eingabedateipfad und die Eingabeprotokollinformationen Ebene, Eingabeformat und Format können angepasst werden. Nach der Ausführung des Codes generiert die Datei example.log die folgenden Informationen:#日志打印到文件中 import logging logging.basicConfig(filename="example.log",level=logging.INFO, format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]") # H 24小时格式 I 12小时格式 A 周几完整 a 周几简写 p AM/PM logging.debug("This message should go to the log file") logging.info("So should this") logging.warning("And this ,too")Das level=loggin.INFO im folgenden Satz bedeutet Um die Protokollierungsebene auf INFO zu setzen, werden nur Protokolle in der Datei aufgezeichnet, deren Ebene INFO oder höher ist. In diesem Beispiel wird das erste Protokoll nicht aufgezeichnet. Wenn Sie Debug-Protokolle aufzeichnen möchten, ändern Sie die Protokollebene zu DEBUG. Das ist es
10/31/2016 17:16:17 [Monday] So should this 10/31/2016 17:16:17 [Monday] And this ,too
Wenn Sie das Protokoll gleichzeitig auf dem Bildschirm und im Dateiprotokoll drucken möchten, müssen Sie einige komplizierte Kenntnisse kennen:
Die Protokollierungsbibliothek verfolgt einen modularen Ansatz und bietet mehrere Kategorien von Komponenten: Logger, Handler, Filter und Formatierer.
Logger stellen die Schnittstelle bereit, die der Anwendungscode direkt verwendet.
Handler senden die (von Loggern erstellten) Protokolldatensätze an das entsprechende Ziel.
Filter bieten eine feinere Möglichkeit zur Bestimmung, welche Protokolldatensätze ausgegeben werden sollen.
Formatierer geben das Layout der Protokolldatensätze in der endgültigen Ausgabe an .
Global Die Protokollebene ist das Endergebnis des gesamten Programms. Wenn Sie die lokale Protokollebene drucken möchten, darf sie nicht niedriger sein als diese Ebene#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian import logging #创建logger logger = logging.getLogger("test_log") #创建logger对象 括号内容随便写 logger.setLevel(logging.INFO) #全局日志级别 ch = logging.StreamHandler() #日志打印到屏幕上 ch.setLevel(logging.DEBUG) #指定ch日志打印级别 fh = logging.FileHandler("access.log") #日志存进文件 fh.setLevel(logging.WARNING) #指定fh日志输入级别 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") #定义日志格式,可写多个 #添加日志格式到ch,fh ch.setFormatter(formatter) fh.setFormatter(formatter) #添加ch,fh到logger中 logger.addHandler(ch) logger.addHandler(fh) logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')
Siebdruckinformationen
access.log:2016-10-31 17:23:42,988 - test_log - INFO - info message 2016-10-31 17:23:42,988 - test_log - WARNING - warn message 2016-10-31 17:23:42,988 - test_log - ERROR - error message 2016-10-31 17:23:42,988 - test_log - CRITICAL - critical message
Alle Protokollformate:
2016-10-31 17:02:06,223 - test_log - WARNING - warn message 2016-10-31 17:02:06,224 - test_log - ERROR - error message 2016-10-31 17:02:06,224 - test_log - CRITICAL - critical message
Mehrere wichtige Formate: %(lineno)d Ausgaben In der Codezeile des Druckprotokolls gibt %(process)d den Prozess des Druckens der Protokoll-ID aus, %(thread)d gibt die Thread-ID des Druckprotokolls aus