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`.
encapsule juste
la journalisation, donc si vous appelez
logging.config.fileConfig ()avant ʻapp.run ()
, les paramètres seront reflétés.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
.
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