Ich habe ein Beispiel für die Ausgabe von Protokollen erstellt, als ich mein eigenes Python-Modul erstellt habe.
Rufen Sie ein Modul namens sample.py von main.py auf. Ich schreibe den Protokollausgabeprozess in sample.py, aber wenn der Root-Logger nicht in main.py erstellt wird, gibt der Logger im Modul nichts aus.
Innerhalb des Moduls erstellen. Schreiben Sie die Verarbeitung der Protokollausgabe.
sample.py
# -*- coding:utf-8 -*-
from logging import getLogger, DEBUG, NullHandler
class Sample:
def __init__(self):
self._logger = getLogger(__name__)
self._logger.addHandler(NullHandler())
self._logger.setLevel(DEBUG)
self._logger.propagate = True
def main(self):
self._logger.debug('Debug')
self._logger.info('Info')
self._logger.warn('Warn')
self._logger.error('Error')
Erstellen Sie eine Root-Logger-Definition zur Verwendung in main.py mit dem Dateinamen my_logger.py. (Die folgende Definition kann in main.py vorgenommen werden, befindet sich jedoch in einer separaten Datei.)
my_logger.py
# -*- coding:utf-8 -*-
from logging import Formatter, handlers, StreamHandler, getLogger, DEBUG
def root_logger():
#Holen Sie sich Root-Logger
logger = getLogger()
#Formatierer erstellen
formatter = Formatter('%(asctime)s %(name)s %(funcName)s [%(levelname)s]: %(message)s')
#Erstellen Sie einen Handler und legen Sie den Formatierer fest
handler = StreamHandler()
handler.setFormatter(formatter)
#Legen Sie den Handler im Logger fest und legen Sie die Ebene für die Ereigniserfassung fest
logger.addHandler(handler)
#Protokollstufe einstellen
logger.setLevel(DEBUG)
return logger
Erstellen Sie main.py, das das Beispielmodul aufruft. Wie Sie im Kommentar unten sehen können, rufen Sie my_logger.py auf, das zuvor erstellt wurde, um einen Root-Logger zu erstellen.
main.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import my_logger
import sample
from logging import Formatter, handlers, StreamHandler, getLogger, INFO
if __name__ == '__main__':
#Erstellen Sie einen Root-Logger
logger = my_logger.root_logger()
logger.info('The root logger is created.')
#Modulaufruf
sample = sample.Sample()
sample.main()
Wenn Sie main.py ausführen, wird das Protokoll wie unten gezeigt ausgegeben.
$ python main.py
2020-02-17 14:01:21,721 root <module> [INFO]: The root logger is created.
2020-02-17 14:01:21,721 sample main [DEBUG]: Debug
2020-02-17 14:01:21,721 sample main [INFO]: Info
2020-02-17 14:01:21,721 sample main [WARNING]: Warn
2020-02-17 14:01:21,721 sample main [ERROR]: Error
Überprüfen Sie das Verhalten, wenn der Root-Logger nicht erstellt wurde.
Kommentieren Sie den Teil von main.py aus, der den Root-Logger erstellt.
main.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import my_logger
import sample
from logging import Formatter, handlers, StreamHandler, getLogger, INFO
if __name__ == '__main__':
#Kommentieren Sie Folgendes aus.
# logger = my_logger.root_logger()
# logger.info('The root logger is created.')
#Modulaufruf
sample = sample.Sample()
sample.main()
Wenn ich main.py starte, wird nichts ausgegeben.
$ python main.py
das ist alles
Recommended Posts