gpt4 book ai didi

python - 在 Gunicorn 中使用 aiohttp 和 aiopg 时如何设置日志记录?

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:01 25 4
gpt4 key购买 nike

aiohttp 很棒,但是在使用 Gunicorn 时设置日志记录一直是一场噩梦,无论是在本地还是在生产环境中。

我找到的大多数用于设置日志记录的示例和文档都是针对在 native 服务器模式下运行的,您可以在该模式下使用 make_handler()

按照文档中的建议,我使用 Gunicorn 作为要部署的 Web 服务器,因此我没有显式调用 make_handler

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

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

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文件

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

我使用以下命令启动 gunicorn:

gunicorn 'app:run()' --worker-class aiohttp.worker.GunicornWebWorker

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

[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 日志(运行的查询)
  • 访问日志
  • 服务器日志

谢谢

最佳答案

文档最终不推荐使用 Gunicorn 进行部署,但有在 Gunicorn 下运行的说明

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

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

如果您需要多个 aiohttp 实例——在反向代理模式下使用 nginx(很可能您的工具链中已经有了它)并使用 supervisord 来控制服务器。

这种组合不需要中间层就可以工作。就像人们开始 Tornado 或扭曲一样。

关于python - 在 Gunicorn 中使用 aiohttp 和 aiopg 时如何设置日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com