aiohttp
很棒,但在使用Gunicorn
时,设置日志记录在本地和生产中都是一场噩梦。
我找到的用于设置日志记录的大多数示例和文档都是在本机服务器模式下运行,您使用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 '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
我想要的是什么:
由于
答案 0 :(得分:2)
文档最终不建议使用Gunicorn进行部署,但有指示在Gunicorn下运行。
也许它应该升级为传递正确的访问记录器格式。
从我的角度来看,运行aiohttp服务器的最简单方法就是运行它(通过使用web.run_app()
处理程序或在其上构建自己的运行程序。)
如果您需要多个aiohttp实例 - 在反向代理模式下使用nginx(很可能已在工具链中使用它)和监控服务器的监督。
组合无需中间层即可运行。就像人们开始龙卷风或扭曲一样。