Wenn Sie versuchen, die Protokollierung in Python zu implementieren, denken Sie, dass Sie sie im Grunde genommen anhand des offiziellen Tutorials erstellen.
https://docs.python.org/ja/3/howto/logging.html
logging_test.py
import logging
def main():
logging.info("it is logging.")
Wie in diesem Artikel ausgeführt, ist die im oberen Teil beschriebene Methode jedoch keine sehr geeignete Methode, und die folgende Notation wird empfohlen. Ich bin.
logger_test.py
from logging import getLogger
logger = getLogger(__name__)
def main():
logger.info("it is logger.")
Daher sollte die Protokollierung grundsätzlich mit dieser Methode implementiert werden, und die Protokollausgabe des tatsächlich verteilten Pakets ist hauptsächlich diejenige, in der der Loggername definiert ist.
Andererseits denke ich, dass es bei der Protokollierung mit Flask viele Leute gibt, die dies implementieren, indem sie auf die folgenden Websites verweisen.
https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/logging.html
Wenn Sie es zu diesem Zeitpunkt unter Bezugnahme auf dictConfig implementieren,
app.py
from flask import Flask
from logging.config import dictConfig
from src.logging import logging_test, logger_test
dictConfig({
'version': 1,
'formatters': {'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}},
'handlers': {'wsgi': {
'class': 'logging.StreamHandler',
'stream': 'ext://flask.logging.wsgi_errors_stream',
'formatter': 'default'
}},
'root': {
'level': 'INFO',
'handlers': ['wsgi']
}
})
app = Flask(__name__)
@app.route('/')
def hello_world():
logging_test.main()
logger_test.main()
return 'Hello, World!'
if __name__ == "__main__":
app.run(debug=True)
Das Logger-Protokoll wird nicht ausgegeben.
[2020-11-12 09:47:05,506] INFO in logging_test: it is logging.
[2020-11-12 09:47:05,506] INFO in _internal: 127.0.0.1 - - [12/Nov/2020 09:47:05] "GET / HTTP/1.1" 200 -
Dies liegt daran, dass das Definieren des Loggernamens mit getLogger ihn nicht länger zu einem Root-Logger macht. Um als Flask-Protokoll auszugeben, fügen Sie daher den Logger, den Sie ausgeben möchten, in die Logger von dictConfig ein. Muss hinzugefügt werden.
'loggers': {'src': {
'level': 'INFO'
}},
Auf diese Weise können Sie den Logger unter src ausgeben.
[2020-11-12 10:02:17,987] INFO in logging_test: it is logging.
[2020-11-12 10:02:17,987] INFO in logger_test: it is logger.
[2020-11-12 10:02:17,988] INFO in _internal: 127.0.0.1 - - [12/Nov/2020 10:02:17] "GET / HTTP/1.1" 200 -
Sie können auch einzelne Handler angeben, um das Protokoll auszugeben. In diesem Fall wird das Protokoll zweimal ausgegeben. Setzen Sie daher propagate auf False. Und Sie können es verhindern.
'loggers': {'src': {
'level': 'INFO',
'handlers': ['wsgi'],
'propagate': False
}},
Wenn Sie dies anwenden, können Sie auch den Logger des importierten Pakets ausgeben. Wenn Sie beispielsweise den Logger von Flask-OAuthlib ausgeben möchten, fügen Sie den Loggern die folgenden Einstellungen hinzu.
'flask_oauthlib': {
'level': 'DEBUG'
}
Auf diese Weise können Sie die Protokollausgabe des Pakets wie zuvor überprüfen.
Ich habe ein wenig Zeit damit verbracht, das zu untersuchen, also werde ich es als Memorandum belassen.
Recommended Posts