Вы можете добавить любые дополнительные данные в журнал, используя logging.Formatter .Просто пример:
log.py
import logging
from flask import request
class __RequestFormatter(logging.Formatter):
def format(self, record):
# you can set here everything what you need
# I just added url and id from GET parameter
record.id = request.args.get('id')
record.url = request.url
return super().format(record)
# format of our log record.
# print url and id of record which was set in format()
__stream_handler = logging.StreamHandler()
__stream_handler.setFormatter(__RequestFormatter(
'[%(asctime)s %(levelname)s] requested: %(url)s, id: %(id)s in %(module)s: %(message)s'
))
logger = logging.getLogger('my_loger')
logger.setLevel(logging.INFO)
logger.addHandler(__stream_handler)
app.py
from flask import Flask
from log import logger
from other_file import other_module
app = Flask(__name__)
@app.route('/test')
def test():
logger.info('/test was called')
other_module()
return 'hi'
other_file.py
from log import logger
def other_module():
logger.info("My second message")
Теперь давайте позвоним /test?id=example_id
, /test?id=example_id2
и проверим журналы:
[2018-09-28 17:40:48,669 INFO] requested: http://127.0.0.1:5000/test?id=example_id, id: example_id in app: /test was called
[2018-09-28 17:40:48,670 INFO] requested: http://127.0.0.1:5000/test?id=example_id, id: example_id in other_file: My second message
[2018-09-28 17:40:51,475 INFO] requested: http://127.0.0.1:5000/test?id=example_id2, id: example_id2 in app: /test was called
[2018-09-28 17:40:51,476 INFO] requested: http://127.0.0.1:5000/test?id=example_id2, id: example_id2 in other_file: My second message
Как видите, все сообщения включают id
запроса.Таким образом, вы можете использовать Formatter
, чтобы настроить все, что вам нужно.Также вы можете попробовать использовать flask-log-request-id .
Надеюсь, это поможет.