Lire les paramètres de journalisation à partir d'un fichier externe avec Flask

Lorsque vous vous connectez normalement avec Flask, comme Exemple de journalisation Flask,

app.py


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

Vous pouvez facilement le faire comme ça. Cependant, fileConfig qui lit les paramètres du fichier externe de journalisation

fileConfig


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

Et dictConfig ne peut pas être utilisé

dictConfig


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

Naturellement, ce sera ʻAttribute Error`.

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'

Par conséquent, cela semble inutile à moins que vous ne l'écriviez dans le code un par un avec ʻapp.logger.addHandler`.

Cependant, ʻapp.logger encapsule juste la journalisation, donc si vous appelez logging.config.fileConfig ()avant ʻapp.run (), les paramètres seront reflétés.

fichier de configuration

En gros, reportez-vous à la Documentation. La façon d'écrire yaml doit correspondre à l'argument mot-clé du constructeur de class (dans ce cas logging.StreamHandler et logging.TimedRotatingFileHandler) utilisé pour handlers.

Modèle personnel

Je préfère yaml à ini alors j'utilise 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]

Si vous oubliez la dernière racine, cela ne fonctionnera pas Je suis resté coincé sans m'en apercevoir

Recommended Posts

Lire les paramètres de journalisation à partir d'un fichier externe avec Flask
[Django] Comment lire les variables / constantes définies dans un fichier externe
Vérifiez si le fichier de paramètres est lu de manière simple à comprendre
Lisez le fichier en Python avec un chemin relatif depuis le programme
Meilleures pratiques pour les fichiers de configuration dans Flask
Comment lire les variables d'environnement à partir d'un fichier .env avec PyCharm (pour Mac)
[Note] Lire un fichier depuis un autre répertoire
Paramètres lors de l'ajout d'un disque dur sous Linux
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Mappez automatiquement les contrôleurs à partir des URL avec Flask
[Python] Lire la ligne spécifiée dans le fichier
Le modèle Django lit Makdown et reStructuredText écrits dans un fichier externe au format HTML
Lire le fichier
Lire un fichier contenant des lignes brouillées en Python
Créer un fichier qui peut être exécuté dans le langage de script
Du dessin de fichier au graphique en Python. Élémentaire élémentaire
Paramètres de journalisation pour la rotation quotidienne des journaux avec python
Lire ligne par ligne à partir d'un fichier avec Python
Comment lire des fichiers dans différents répertoires
Livre recommandé lu dans 2 ans à partir du nouveau diplômé
Afficher des images dans OpenCV à partir de Python à l'aide d'une caméra USB externe sur votre MacBook