<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>Hi all,</div>

<div> </div>

<div>I've a running project and want to know how to improve/refine it.</div>

<div>As I said it is running, but I don't know if the code is well-structured.</div>

<div> </div>

<div>Is there a better way to teach the uwsgi to output in json format?</div>

<div>The return of app.app in create_app looks strange, but seems correct?!</div>

<div> </div>

<div> </div>

<div>app.py</div>

<div> </div>

<div>
<div>import os<br/>
from project import create_app</div>

<div>app=create_app(os.environ.get('FLASK_CONFIG'))</div>

<div> </div>

<div> </div>

<div>project/__init__.py</div>

<div> </div>

<div>
<div>import os<br/>
import json<br/>
import pytz<br/>
import connexion<br/>
from datetime import datetime<br/>
import logging<br/>
import logging.config<br/>
from flask import Flask, url_for, redirect, request, request_started<br/>
from config import config_by_name<br/>
from flask_sqlalchemy import SQLAlchemy<br/>
from custom_logging import CustomJsonFormatter</div>

<div>db = SQLAlchemy()</div>

<div> </div>

<div>def create_app(config_name):</div>

<div>    app = connexion.FlaskApp(__name__)<br/>
    app.add_api('swagger.yaml')<br/>
    app.app.config.from_object(config_by_name[config_name])</div>

<div>    db.init_app(app.app)</div>

<div>   </div>

<div>    logger = logging.getLogger('connexion.app')<br/>
    logHandler = logging.StreamHandler()<br/>
    formatter = CustomJsonFormatter()<br/>
    logHandler.setFormatter(formatter)<br/>
    logger.setLevel(logging.DEBUG)<br/>
    logger.addHandler(logHandler)</div>

<div> </div>

<div>    def _init_logging():<br/>
        logger = logging.getLogger()<br/>
        logger.setLevel(logging.DEBUG)<br/>
        logger.addHandler(logHandler)</div>

<div> </div>

<div>    try:<br/>
        @postfork<br/>
        def init():<br/>
            _init_logging()<br/>
    except:</div>

<div>        pass</div>

<div> </div>

<div>    _init_logging()<br/>
    return app.app</div>

<div> </div>

<div> </div>

<div> </div>

<div>custom_logging.py</div>

<div> </div>

<div>
<div>from datetime import datetime<br/>
from pythonjsonlogger import jsonlogger<br/>
import pytz</div>

<div>ATTR_TO_JSON = ['msg', 'name', 'threadName', 'levelname', 'levelno', 'X-Correlation-Id']</div>

<div>class CustomJsonFormatter(jsonlogger.JsonFormatter):<br/>
    def add_fields(self, log_record, record, message_dict):<br/>
        super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)</div>

<div><br/>
        obj = {attr: getattr(record, attr, '')<br/>
                  for attr in ATTR_TO_JSON}</div>

<div>        log_record['thread_name'] = obj.pop('threadName')<br/>
        log_record['level'] = obj.pop('levelname')<br/>
        log_record['level_value'] = obj.pop('levelno')<br/>
        log_record['log'] = obj.pop('msg')<br/>
        log_record['logger_name'] = obj.pop('name')<br/>
        log_record['X-Correlation-Id'] = obj.pop('X-Correlation-Id')</div>

<div><br/>
        dtObject = datetime.now()<br/>
        local_tz = pytz.timezone('Europe/Berlin')<br/>
        local_tz.localize(dtObject)<br/>
        tz_date = local_tz.localize(dtObject).isoformat()<br/>
        log_record['timestamp'] = tz_date</div>
</div>

<div> </div>

<div> </div>

<div> </div>

<div>wsgi.ini</div>

<div> </div>

<div>
<div>[uwsgi]<br/>
project = a_sample_api<br/>
http = 0.0.0.0:7889<br/>
socket = :7888<br/>
chmod-socket = 666</div>

<div>module = app:app<br/>
master = true<br/>
processes = 5<br/>
vacuum = true<br/>
die-on-term = true<br/>
pidfile = /tmp/%(project).pid</div>

<div>paste-logger = true<br/>
disable-logging = true<br/>
log-reopen=true<br/>
log-format = %(msg)</div>

<div> </div>

<div> </div>

<div> </div>

<div>Regards,</div>

<div>Sascha</div>
</div>
</div>
</div></div></body></html>