gunicorn部署的flask,多進程日誌問題,

使用flask時候,我們經常使用logging來寫日誌。

但是gunicorn是多進程啓動的,logging進程不安全!

日誌經常會缺,只有一部分日誌。

就算整合到gunicorn的日誌中

if __name__ != '__main__':
    gunicorn_logger = logging.getLogger('gunicorn.error')
    app.logger.handlers = gunicorn_logger.handlers
    app.logger.setLevel(gunicorn_logger.level)

還是隻有部分日誌。

 

問題苦惱了我很久,今天無意間發現了一個包concurrent_log

https://github.com/huanghyw/concurrent_log

可以解決此類問題,具體使用方法在git上很明白,我就不贅述了。

源碼也簡單看了看,很簡潔,簡單的思想就是用了2個鎖。

一個鎖是靜態變量,基於GIL就可以保證python的線程安全。

另一個是進程鎖,用的是PortaLock文件鎖,實現了nt和posix,所以大部分部署gunicorn的地方都能用。

concurrent_log就可以分別保證線程和進程安全,就git作者的測試來說(500k行log),性能還有所提高。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章