首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用aiohttp和aiopg与Gunicorn时设置日志记录?

如何在使用aiohttp和aiopg与Gunicorn时设置日志记录?
EN

Stack Overflow用户
提问于 2016-08-22 16:26:08
回答 1查看 3.7K关注 0票数 7

aiohttp很棒,但是当使用Gunicorn时,在本地和生产中设置日志记录都是一场噩梦。

我发现的大多数用于设置日志记录的示例和文档都用于在本机服务器模式下运行,在该模式下使用make_handler()

正如文档中推荐的那样,我使用Gunicorn作为Web进行部署,因此我不会显式地调用make_handler

我没有看到aiohttp.access日志,也没有看到aiohttp.server日志,也没有aiopg日志,在默认情况下,所有这些都应该设置为

这就是我在根级app.py中得到的

代码语言:javascript
复制
import logging

import aiopg
from aiohttp import web

async def some_handler(request):
    id = request.match_info["id"]
    # perform some SA query
    return web.json_response({"foo": id})

async def close_postgres(app):
    app['postgres'].close()
    await app['postgres'].wait_closed

async def init(loop, logger, config):
    app = web.Application(
        loop=loop,
        logger=logger
    )

    app['postgres'] = await aiopg.sa.create_engine(loop=loop, echo=True) # other args ommitted
    app.on_cleanup.append(close_postgres)

    app.router.add_route('GET', '/', some_handler, 'name')

    return app

def run():
    config = parse_yaml('config.yml') # => turns config.yml to dict
    logging.config.dictConfig(config['logging'])
    logger = logging.getLogger("api")

    loop = asyncio.get_event_loop()
    app = run_until_complete(init(loop, logger, config))

    return app

我的config.yml文件

代码语言:javascript
复制
logging:
  version: 1
  formatters:
    simple:
      format: '[%(asctime)s] [%(process)d] [%(levelname)s] %(message)s'
      datefmt: '%Y-%m-%d %H:%M:%S %z'
  handlers:
    console:
      class: logging.StreamHandler
      formatter: simple
      level: DEBUG
      stream: ext://sys.stdout
  loggers:
    api:
      handlers:
        - console
      level: DEBUG

我用以下方式发射金牛号:

代码语言:javascript
复制
gunicorn 'app:run()' --worker-class aiohttp.worker.GunicornWebWorker

无论进行什么查询,我都只看到以下日志:

代码语言:javascript
复制
[2016-08-22 11:26:46 -0400] [41993] [INFO] Starting gunicorn 19.6.0
[2016-08-22 11:26:46 -0400] [41993] [INFO] Listening at: http://127.0.0.1:8000 (41993)
[2016-08-22 11:26:46 -0400] [41993] [INFO] Using worker: aiohttp.worker.GunicornWebWorker
[2016-08-22 11:26:46 -0400] [41996] [INFO] Booting worker with pid: 41996

我想要的:

  • aiopg日志(运行的查询)
  • 访问日志
  • 服务器日志

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-23 17:53:52

文档最终不建议使用Gunicorn进行部署,但是有关于在Gunicorn下运行的说明。

也许应该将其升级为传递访问记录器的正确格式。

在我看来,运行aiohttp服务器最简单的方法就是运行它(通过使用web.run_app()处理程序或在其之上构建自己的运行程序)。

如果您需要几个aiohttp实例-在反向代理模式下使用nginx (很可能您已经将它放在您的工具链中)并对服务器进行监控。

这种组合只是在不需要中间层的情况下工作。就像人们开始龙卷风或扭曲。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39084433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档