代码之家  ›  专栏  ›  技术社区  ›  Bogdan

uwsgi+烧瓶测井。配置不工作,也会中断应用程序

  •  0
  • Bogdan  · 技术社区  · 6 年前

    在过去的5个小时里一直在寻找答案,但什么也没找到。

    我有一个flask(python 2.7)应用程序可以很好地与uwsgi配合使用,但我没有日志。

    /etc/uwsgi/uwsgi。ini配置:

    [uwsgi]
    socket = /tmp/uwsgi.sock
    chown-socket = nginx:nginx
    chmod-socket = 664
    cheaper = 2
    processes = 16
    

    /应用程序/uwsgi。ini公司

    [uwsgi]
    module = main
    callable = app
    

    /应用程序/主。py(在没有uwsgi的情况下工作正常)

    app = Flask(__name__)
    ...
    ...
    ...
    if __name__ == "__main__":
        with open("{0}/logging.config.json".format(CONFIG_PATH), "r") as fd:
            logging.config.dictConfig(json.load(fd))
        app.run()
    

    登录中。配置。json:

    ...
    "formatters": {
      "simple": {
          "()": "pythonjsonlogger.jsonlogger.JsonFormatter",
          "format": "%(asctime)s %(levelname)s %(module)s %(message)s"
        }
    ...
    "handlers": {
    "console":{
          "level": "DEBUG",
          "class": "logging.StreamHandler",
          "formatter": "simple",
          "stream" : "ext://sys.stdout"
      },
      "loggers": { },
      "root": {
          "handlers": ["console"],
          "level": "DEBUG"
      }
    }
    

    我还尝试将记录器移到main之外(一篇帖子建议这样做),如下所示:

    app = Flask(__name__)
    
    with open("{0}/logging.config.json".format(CONFIG_PATH), "r") as fd:
        logging.config.dictConfig(json.load(fd))
    ...
    ...
    ...
    if __name__ == "__main__":
        app.run()
    

    它只是破坏了uwsgi:

    --- no python application found, check your startup logs for errors ---
    

    与应用程序声明之前的日志声明相同(但没有错误-应用程序无法工作)

    有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bogdan    6 年前

    我发现了问题:

    "formatters": {
    "simple": {
      "()": "pythonjsonlogger.jsonlogger.JsonFormatter",
      "format": "%(asctime)s %(levelname)s %(module)s %(message)s"
    }
    

    pythonjsonlogger是我几十年前手动安装的一个库,但我忘记了。声明日志记录时未正确加载。配置。dictConfig()。

    此外,无论谁看到这个,uWSGI都只调用这个应用程序。run(),如果您想查看任何日志,您应该在声明应用程序之前声明日志记录。如:

    with open("{0}/logging.config.json".format(CONFIG_PATH), "r") as fd:
        logging.config.dictConfig(json.load(fd))
    
    app = Flask(__name__)
    ...
    ...
    ...
    if __name__ == "__main__":
        app.run()