默认什么都不配置的话,flask只会输出默认的内容到默认的一个streamhandler,也就是发送到console,不会写日志文件
但这不符合要求,我们希望flask作为一个后端服务能及时把所有的运行和访问日志都记录到指定的文件,同时也能在console输出一份,此时有多种方式实现:
方法一:
使用flask默认生成的logger,不用管它的名字,只需要给他添加一个写文件的handler1
调整默认logger的log level为debug,这样info.debug也能处理了,flask默认是warning级别以上error,critical才处理。
handler1 = logging.FileHandler('logs/flask-typ1.log', encoding='utf-8')
logging_format = logging.Formatter('[%(asctime)s] %(levelname)s in %(filename)s line:%(lineno)s: %(message)s')
handler1.setFormatter(logging_format)
app = Flask('jack')
app.logger.addHandler(handler1)
app.logger.setLevel('DEBUG')
这样配置后你在项目里用app.logger.info/debug/warn/error/critical的记录的日志信息都会被2个handler处理,一个是系统默认那个写console的streamhandler,另一个就是刚刚添加的handler1写到文件
console:
文件:
貌似是可以了,但是你会发现自己打日志的点没问题了,但是flask自己记录wsgi请求的日志只写了console没写日志!这几乎是最重要的信息了,缺没有记录,这是为什么呢?
那么实际这一行请求日志是从哪里发出的呢?在用方法二导入logger的格式后,你会从日志输出发现是在_internal这个文件的224行
[2023-06-15 09:47:18,680] INFO in app line-2532: 404 NOT FOUND
[2023-06-15 09:47:18,680] INFO in _internal line-224: 192.168.1.104 - - [15/Jun/2023 09:47:18] "GET / HTTP/1.1" 404 -
[2023-06-15 09:47:55,800] INFO in app line-2532: 404 NOT FOUND
[2023-06-15 09:47:55,800] INFO in _internal line-224: 192.168.1.104 - - [15/Jun/2023 09:47:55] "GET /mj666/test HTTP/1.1" 404 -
224行_log函数定义在此,调用是在/werkzeug/serving.py 下面的
class WSGIRequestHandler() 下面的log_request函数中,而WSGIRequestHandler 实际是对http.server下面的BaseHTTPRequestHandler的封装
from http.serv
推荐链接
发表评论