aiohttp
很棒,但使用Gunicorn
時,設置日誌記錄一直是一個噩夢,無論是在本地還是在生產中。在Gunicorn使用aiohttp和aiopg時如何設置日誌記錄?
大多數實例和文檔我找到設置日誌記錄是在本機服務器模式下運行,在您使用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日誌(查詢RAN)
- 訪問日誌
- 服務器日誌
感謝
謝謝老闆!除了自動重新加載之外,我知道這是一個正在開發的功能,所以我最終將Gunicorn拆除並且一切正常。你是對的,我並不需要它 - 我主要是誤導,因爲在文檔中有一個標題爲「使用Gunicorn進行部署」的主要部分。 – jellycola
我是否正確理解aiohttp本機服務器+ nginx是否足以用於生產設置?謝謝 – wolendranh
是的。基本上部署過程與扭曲或龍捲風相同。 –