2016-08-22 89 views
2

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)
  • 訪問日誌
  • 服務器日誌

感謝

回答

2

文檔沒有最終推薦使用Gunicorn部署,但有說明爲Gunicorn下運行。

也許它應該升級到爲訪問記錄器傳遞正確的格式。

從我的角度來看,運行aiohttp服務器的最簡單方法就是運行它(通過使用web.run_app()處理程序或在其上構建自己的運行程序)。

如果您需要幾個aiohttp實例 - 在反向代理模式下使用nginx(很可能您已經在您的工具鏈中擁有它)並使用supervisord控制服務器。

這個組合不需要中間層就可以工作。就像人們開始龍捲風或扭曲一樣。

+0

謝謝老闆!除了自動重新加載之外,我知道這是一個正在開發的功能,所以我最終將Gunicorn拆除並且一切正常。你是對的,我並不需要它 - 我主要是誤導,因爲在文檔中有一個標題爲「使用Gunicorn進行部署」的主要部分。 – jellycola

+0

我是否正確理解aiohttp本機服務器+ nginx是否足以用於生產設置?謝謝 – wolendranh

+0

是的。基本上部署過程與扭曲或龍捲風相同。 –

相關問題