python-3.x - Python,Flask 同时打印到控制台和日志文件
问题描述
我正在使用 python 3.7.3,flask 版本为 1.0.2。
在没有以下导入的情况下运行我的 app.py 文件时:
import logging
logging.basicConfig(filename='api.log',level=logging.DEBUG)
Flask 会向控制台显示相关的调试信息,例如 POST/GET 请求以及它们来自哪个 IP。
启用调试日志记录后,我将不再收到此输出。我尝试在调试模式下运行我的应用程序:
app.run(host='0.0.0.0', port=80, debug=True)
但这会产生相同的结果。有没有办法同时启用控制台输出和 python 日志记录?这听起来像是一个愚蠢的请求,但我想使用控制台进行演示,同时提供日志文件以进行故障排除。
解决方案
找到了解决方案:
import logging
from flask import Flask
app = Flask(__name__)
logger = logging.getLogger('werkzeug') # grabs underlying WSGI logger
handler = logging.FileHandler('test.log') # creates handler for the log file
logger.addHandler(handler) # adds handler to the werkzeug WSGI logger
@app.route("/")
def index():
logger.info("Here's some info")
return "Hello World"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
其他示例:
# logs to console, and log file
logger.info("Some text for console and log file")
# prints exception, and logs to file
except Exception as ue:
logger.error("Unexpected Error: malformed JSON in POST request, check key/value pair at: ")
logger.error(ue)
来源: https ://docstrings.wordpress.com/2014/04/19/flask-access-log-write-requests-to-file/
如果链接断开:
您可能会感到困惑,因为向 Flask 的 app.logger 添加处理程序不会捕获您在控制台中看到的输出,例如:
127.0.0.1 - - [19/Apr/2014 18:51:26] "GET / HTTP/1.1" 200 -
这是因为 app.logger 用于 Flask,并且输出来自底层 WSGI 模块 Werkzeug。
要访问 Werkzeug 的记录器,我们必须调用 logging.getLogger() 并为其命名 Werkzeug 使用的名称。这允许我们使用以下命令将请求记录到访问日志中:
logger = logging.getLogger('werkzeug')
handler = logging.FileHandler('access.log')
logger.addHandler(handler)
# Also add the handler to Flask's logger for cases
# where Werkzeug isn't used as the underlying WSGI server.
# This wasn't required in my case, but can be uncommented as needed
# app.logger.addHandler(handler)
您当然可以添加自己的格式和其他处理程序。
推荐阅读
- node.js - IBM Cloud Functions 在 Watson Assistant / node.js / json 中打印 API 响应
- java - OWLAPI 在子类断言上设置 DataProperty 严格值
- python - RMSE 每月或每小时按月使用 apply 和 python
- python - 列表的 SQLAlchemy ORM 集合字典
- r - 在制作考试答案时如何显示每个问题的分数?
- python - Seaborn - Matplotlib 移动 ytick 偏移
- azure-active-directory - AADB2C99002 错误。没有注册政策的 B2C 登录政策?
- logstash - Logstash - 错误“应为 [ \t\r\n]、“#”之一
- visualization - 离散和连续数据的可视化
- postgresql - 在 OneToOne 关系 typeorm postgres 的两边都有 RelationID