Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Verwendung von Protokollierungsbibliotheken in Python

Zusammenfassung der Verwendung von Protokollierungsbibliotheken in Python

黄舟
黄舟Original
2017-10-18 11:02:111680Durchsuche

Das Protokollierungsmodul von Python bietet ein allgemeines Protokollierungssystem, das von Modulen oder Anwendungen von Drittanbietern verwendet werden kann. Der folgende Artikel stellt Ihnen hauptsächlich einige Wissenszusammenfassungen über die Verwendung von Protokollierungsbibliotheken in Python vor Code, Freunde in Not können darauf verweisen, schauen wir uns unten an.

Vorwort

Aus beruflichen Gründen habe ich in letzter Zeit einige Python-Skripte geschrieben, um immer Print zum Drucken zu verwenden Informationen, also habe ich mir die Zeit genommen, die Protokollierungsbibliothek von Python zu studieren, um Protokolle elegant aufzuzeichnen. Ich werde im Folgenden nicht näher darauf eingehen, werfen wir einen Blick auf die detaillierte Einführung.

1. Drucken Sie das Protokoll einfach auf dem Bildschirm aus:


import logging

logging.debug('This is debug message')  #debug
logging.info('This is info message')   #info
logging.warning('This is warning message') #warn

Bildschirm Drucken am: WARNING:root:This is warning message

Standardmäßig werden Protokolle der Stufe WARNUNG gedruckt

  • DEBUG: detaillierte Informationen, Debugging-Informationen.

  • INFO: Bestätigt, dass alles wie erwartet funktioniert.

  • WARNUNG: Weist darauf hin, dass etwas Unerwartetes passiert ist oder in naher Zukunft ein Problem auftreten wird (z. B. „Datenträger voll“). Die Software funktioniert weiterhin normal.

  • FEHLER: Aufgrund schwerwiegenderer Probleme kann die Software einige Funktionen nicht mehr ausführen.

  • KRITISCH: Ein schwerwiegender Fehler, der darauf hinweist, dass die Software nicht mehr ausgeführt werden kann.

2. Konfigurieren Sie das Protokolleingabeformat und die Methode über die basicConfig-Funktion


import logging

logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%Y-%m-%d %a %H:%M:%S',
    filename='test.log',
    filemode='w')
 
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

Der obige Code druckt das Protokoll nicht auf dem Bildschirm, sondern generiert die Protokolldatei test.log im aktuellen Verzeichnis. Das Protokoll wird in der Protokolldatei gedruckt:

2017-10-16 Mo 10:05:17 testlogging.py[line:25] DEBUG Dies ist eine Debug-Meldung

2017-10-16 Mo 10:05:17 testlogging.py[ Zeile :26] INFO Dies ist eine Infonachricht

2017-10-16 Mon 10:05:17 testlogging.py[line:27] WARNUNG Dies ist eine Warnnachricht

  • Parameter der logging.basicConfig-Funktion:

  • Dateiname: Geben Sie den Protokolldateinamen an.

  • Dateimodus: Dieselbe Bedeutung wie Dateifunktion, geben Sie den Protokolldateiöffnungsmodus „w“ oder „a“ an das obige Beispiel:


datefmt: Gibt das Zeitformat an, genau wie time.strftime()
 %(levelno)s: 打印日志级别的数值
 %(levelname)s: 打印日志级别名称
 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
 %(filename)s: 打印当前执行程序名
 %(funcName)s: 打印日志的当前函数
 %(lineno)d: 打印日志的当前行号
 %(asctime)s: 打印日志的时间
 %(thread)d: 打印线程ID
 %(threadName)s: 打印线程名称
 %(process)d: 打印进程ID
 %(message)s: 打印日志信息
  • Ebene: Legen Sie die Protokollebene fest, die Standardeinstellung ist Protokollierung.WARNUNG

  • Stream: Geben Sie den Ausgabestream des Protokolls an. Sie können den festlegen Ausgabe an sys.stderr, sys.stdout oder eine Datei, die Standardausgabe erfolgt an sys. Wenn Stream und Dateiname gleichzeitig angegeben werden, wird Stream ignoriert

  • 3. Geben Sie das Protokoll gleichzeitig auf dem Bildschirm und in der Protokolldatei aus


Fügen Sie den obigen Code ein um das Protokoll gleichzeitig auf dem Bildschirm zu drucken

#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
Auf dem Bildschirm drucken:


root : INFO Dies ist eine Infonachricht


root: WARNUNG Dies ist eine Warnmeldung


In der Datei drucken:


2017- 10-16 Mo 10:20:07 testlogging.py[line:46] DEBUG Dies ist eine Debug-Nachricht


2017-10-16 Mon 10:20:07 testlogging.py[line:47] INFO Dies ist eine Info-Nachricht


2017-10- 16 Mo 10:20:07 testlogging.py[line:48] WARNUNG Dies ist eine Warnmeldung


4. Konfigurieren Sie Protokolle über Konfigurationsdateien


Protokollformat

#logger.conf
[loggers]
#定义logger模块,root是父类,必需存在的,其它的是自定义。 
keys=root,infoLogger,warnlogger

[logger_root] 
level=DEBUG       #level  级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
handlers=infohandler,warnhandler #handlers 处理类,可以有多个,用逗号分开

[logger_infoLogger]     #[logger_xxxx] logger_模块名称
handlers=infohandler
qualname=infoLogger     #qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
propagate=0       #propagate 是否继承父类的log信息,0:否 1:是

[logger_warnlogger]
handlers=warnhandler
qualname=warnlogger
propagate=0

###############################################
#定义handler
[handlers]
keys=infohandler,warnhandler

[handler_infohandler]
class=StreamHandler     #class handler类名
level=INFO       #level 日志级别
formatter=form02      #formatter,下面定义的formatter
args=(sys.stdout,)     #args handler初始化函数参数

[handler_warnhandler]
class=FileHandler
level=WARN
formatter=form01
args=('logs/deploylog.log', 'a')

###############################################
# 定义格式化输出
[formatters]
keys=form01,form02

[formatter_form01]
format=%(message)s %(asctime)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_form02]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S


%(asctime)s Jahr-Monat-Tag Stunde-Minute-Sekunde, Millisekunde 2013-04-26 20:10:43,745

  • %(filename)s Dateiname, ohne Verzeichnis

  • %(pathname)s Verzeichnis Name, vollständiger Pfad

  • %(funcName)s Funktionsname

  • %(levelname)s Ebenenname

  • %(lineno)d Zeilennummer

  • %(module)s Modulname

  • %(message)s Nachrichtentext

  • %(name)s Protokollmodulname

  • %(process)d Prozess-ID

  • %(processName)s Prozessname

  • %(thread)d Thread-ID

  • %(threadName)s Threadname

  • Testkonfigurationsdatei


Zusammenfassung
from logging.config import fileConfig

fileConfig('logger.conf')
logger=logging.getLogger('infoLogger')
logger.info('test1')
logger_error=logging.getLogger('warnhandler')
logger_error.warn('test5')

Das obige ist der detaillierte Inhalt vonZusammenfassung der Verwendung von Protokollierungsbibliotheken in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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