目标
通过
gunicorn启动app后可以将info、error等事件写入日志文件,带有错误所在模块-函数-行数
log_config.py
from gunicorn import glogging
import logging
class CustomLogger(glogging.Logger):
"""Custom logger for Gunicorn log messages."""
def setup(self, cfg):
"""Configure Gunicorn application logging configuration."""
super().setup(cfg)
# Override Gunicorn's `error_log` configuration.
self._set_handler(
self.error_log, cfg.errorlog, logging.Formatter(
fmt=('timestamp=%(asctime)s pid=%(process)d '
'loglevel=%(levelname)s code=%(filename)s-%(funcName)s-%(lineno)s '
'msg=%(message)s')))
app.py
......
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True,threaded=True)
if __name__ != '__main__':
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel('INFO') #<<-特别注意,否则info级别不能打印
启动指令
更换·logger_class·默认的gunicorn.glogging.Logger为自定义日志类
gunicorn --logger-class log_config.CustomLogger" -c deploy_config.py run:app
疑惑?
在app.py中写入日志配置类启动,会发现只有一个进程被“真正启动”。flask_sqlalchemy在各个线程创建的db都指向同一地址,不能worker间数据库连接的分离??再去研究下