[PYTHON] Lesen Sie die Protokollierungseinstellungen mit Flask aus einer externen Datei

Wenn Sie normal mit Flask protokollieren, z. B. Beispiel für die Protokollierung von Flask,

app.py


app = Flask(__name__)
app.logger.debug("test message")

Sie können es einfach so machen. Allerdings "fileConfig", das die Einstellungen aus der externen Datei "logging" liest

fileConfig


import logging.config
logging.config.fileConfig("config.ini")

Und dictConfig kann nicht verwendet werden

dictConfig


import logging.config
import yaml
logging.config.dictConfig(yaml.load(open("config.yaml").read()))

Natürlich wird es "Attributfehler" sein.

app.logger.fileConfig('./config.ini')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-29-70995f52c865> in <module>()
----> 1 app.logger.fileConfig('./config.ini')

AttributeError: 'DebugLogger' object has no attribute 'fileConfig'

Daher fühlt es sich nutzlos an, wenn Sie es nicht einzeln mit app.logger.addHandler in Code schreiben.

"App.logger" schließt jedoch nur "logging" ein. Wenn Sie also "logging.config.fileConfig ()" vor "app.run ()" aufrufen, werden die Einstellungen wiedergegeben.

Einstellungsdatei

Lesen Sie grundsätzlich Dokumentation. Das Schreiben von yaml sollte dem Schlüsselwortargument des Konstruktors von "class" (in diesem Fall "logging.StreamHandler" und "logging.TimedRotatingFileHandler") entsprechen, der für "handlers" verwendet wird.

Persönliche Vorlage

Ich bevorzuge Yaml gegenüber Ini, also benutze ich Yaml

config.yaml


version: 1

formatters:
  customFormatter:
    format: '[%(asctime)s]%(levelname)s - %(filename)s#%(funcName)s:%(lineno)d: %(message)s'
    datefmt: '%Y/%m/%d %H:%M:%S'

loggers:
  file:
    handlers: [fileRotatingHandler]
    level: DEBUG
    qualname: file
    propagate: no

  console:
    handlers: [consoleHandler]
    level: DEBUG
    qualname: console
    propagate: no

handlers:
  fileRotatingHandler:
    formatter: customFormatter
    class: logging.handlers.TimedRotatingFileHandler
    level: DEBUG
    filename: log/debug.log
    encoding: utf8
    when: 'D'
    interval: 1
    backupCount: 14

  consoleHandler:
    class: logging.StreamHandler
    level: DEBUG
    formatter: customFormatter
    stream: ext://sys.stdout

root:
  level: DEBUG
  handlers: [fileRotatingHandler,consoleHandler]

Wenn Sie die letzte Wurzel vergessen, funktioniert dies nicht Ich blieb stecken, ohne es zu merken

Recommended Posts

Lesen Sie die Protokollierungseinstellungen mit Flask aus einer externen Datei
[Django] Lesen von Variablen / Konstanten, die in einer externen Datei definiert sind
Überprüfen Sie, ob die Einstellungsdatei leicht verständlich gelesen wird
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Best Practices für Konfigurationsdateien in Flask
Lesen von Umgebungsvariablen aus einer ENV-Datei mit PyCharm (für Mac)
[Hinweis] Lesen Sie eine Datei aus einem anderen Verzeichnis
Einstellungen beim Hinzufügen einer Festplatte unter Linux
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Ordnen Sie Controller automatisch URLs mit Flask zu
[Python] Lesen Sie die angegebene Zeile in der Datei
Die Django-Vorlage lädt Makdown und reStructuredText, die in einer externen Datei als HTML geschrieben sind
Datei lesen
Lesen Sie eine Datei mit verstümmelten Linien in Python
Erstellen Sie eine Datei, die in der Skriptsprache ausgeführt werden kann
Von der Datei zur Diagrammzeichnung in Python. Grundstufe Grundstufe
Protokollierungseinstellungen für die tägliche Protokollrotation mit Python
Lesen Sie mit Python Zeile für Zeile aus der Datei
So lesen Sie Dateien in verschiedenen Verzeichnissen
Empfohlenes Buch in 2 Jahren von neuen Absolventen gelesen
Zeigen Sie Bilder in OpenCV von Python mit einer externen USB-Kamera auf Ihrem MacBook an