Python - Flask - 日志

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值