Я пытаюсь сделать что-то очень похожее на то, что описано здесь: https://sebest.github.io/post/protips-using-gunicorn-inside-a-docker-image/JSON отформатирован каротаж с колбой и gunicorn
Я хочу, чтобы моя Колба приложения + gunicorn как выводящий JSON отформатированной регистрации. У меня это работает для приложения Flask, но я не могу заставить его работать с оружием.
Вот мой выходной ток:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 317-187-130
192.168.99.1 - - [12/Jan/2016 20:09:29] "GET /nothing HTTP/1.1" 404 -
{"asctime": "2016-01-12 20:20:25,541", "levelname": "WARNING", "module": "app", "funcName": "err", "lineno": 17, "message": "will assert false..."}
192.168.99.1 - - [12/Jan/2016 20:20:25] "GET /err HTTP/1.1" 500 -
линия, которая начинается {"asctime":
является выход кода app.logger.warning('will assert false...')
который будучи правильно вошедшего в формате JSON. Ура. Линии, начинающиеся с 192.168.99.1
, выводятся с моего сервера WSGI для стрельбы из штурвала, и, к сожалению, они не отформатированы JSON.
Вот команда, я использую для запуска gunicorn:
gunicorn --log-config gunicorn_logging.conf -c gunicorn_config.py api.app:app
где файл gunicorn_logging.conf
содержит:
[loggers]
keys=root, gunicorn.error
[handlers]
keys=console
[formatters]
keys=json
[logger_root]
level=INFO
handlers=console
[logger_gunicorn.error]
level=ERROR
handlers=console
propagate=0
qualname=gunicorn.error
[handler_console]
class=StreamHandler
formatter=json
args=(sys.stdout,)
[formatter_json]
class=jsonlogging.JSONFormatter
и файл gunicorn_config.py
содержит:
import os
import multiprocessing
addr = os.environ.get('HTTP_ADDR', '0.0.0.0')
port = os.environ.get('HTTP_PORT', '5000')
loglevel = os.environ.get('LOG_LEVEL', 'info')
bind = '{0}:{1}'.format(addr, port)
workers = multiprocessing.cpu_count() * 5 + 1
worker_class = 'gevent'
timeout = 0
Вот результат от pip freeze
:
aniso8601==1.1.0
coverage==4.0.3
flake8==2.5.1
Flask==0.10.1
Flask-MySQLdb==0.2.0
Flask-RESTful==0.3.5
Flask-Script==2.0.5
gevent==1.1rc3
greenlet==0.4.9
gunicorn==19.4.5
itsdangerous==0.24
Jinja2==2.8
json-logging-py==0.2
MarkupSafe==0.23
marshmallow==2.4.2
mccabe==0.3.1
mysqlclient==1.3.7
nose==1.3.7
pep8==1.5.7
pyflakes==1.0.0
python-dateutil==2.4.2
python-json-logger==0.1.4
pytz==2015.7
six==1.10.0
SQLAlchemy==1.0.11
Werkzeug==0.11.3