Python - Flask - 日志

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 10:58   11   0

Flask.logger 可返回名为 'flask.app' 的日 志记录器,可用于应用的日志记录。

*****************************************************************

@app.route('/login', methods=['POST'])

def login():

user = get_user(request.form['username'])

if user.check_password(request.form['password']):

login_user(user)

app.logger.info('%s logged in successfully', user.username)

return redirect(url_for('index'))

else:

app.logger.info('%s failed to log in', user.username)

abort(401)

*****************************************************************

基本配置

*****************************************************************

from logging.config import dictConfig

dictConfig({

'version': 1,

'formatters': {'default': {

'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',

}},

'handlers': {'wsgi': {

'class': 'logging.StreamHandler',

'stream': 'ext://flask.logging.wsgi_errors_stream',

'formatter': 'default'

}},

'root': {

'level': 'INFO',

'handlers': ['wsgi']

}

})

app = Flask(__name__)

*****************************************************************

===============================================================================

发送错误信息邮件

*****************************************************************

import logging

from logging.handlers import SMTPHandler

mail_handler = SMTPHandler(

mailhost='127.0.0.1',

fromaddr='server-error@example.com',

toaddrs=['admin@example.com'],

subject='Application Error'

)

mail_handler.setLevel(logging.ERROR)

mail_handler.setFormatter(logging.Formatter(

'[%(asctime)s] %(levelname)s in %(module)s: %(message)s'

))

if not app.debug:

app.logger.addHandler(mail_handler)

*****************************************************************

===============================================================================

注入请求信息

可以添加其他更多的信息

*****************************************************************

from flask import request

from flask.logging import default_handler

class RequestFormatter(logging.Formatter):

def format(self, record):

record.url = request.url

record.remote_addr = request.remote_addr

return super().format(record)

formatter = RequestFormatter(

'[%(asctime)s] %(remote_addr)s requested %(url)s\n'

'%(levelname)s in %(module)s: %(message)s'

)

default_handler.setFormatter(formatter)

mail_handler.setFormatter(formatter)

*****************************************************************

===============================================================================

其他库

*****************************************************************

from flask.logging import default_handler

root = logging.getLogger()

root.addHandler(default_handler)

root.addHandler(mail_handler)

单独配置每个记录器更好还是只配置一个根记录器更好,取决你的项目。:

for logger in (

app.logger,

logging.getLogger('sqlalchemy'),

logging.getLogger('other_package'),

):

logger.addHandler(default_handler)

logger.addHandler(mail_handler)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP