- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个简单的 Flask-RESTful API,这是我的新手,并且在日志记录方面遇到了一些问题。
使用 export FLASK_ENV=development
,Werkzeug 记录器不会记录任何 HTTP 请求,例如 GET、POST 等。当 export FLASK_ENV=production
一切正常时,一些简单的日志如下所示:
2020-12-30 14:01:03,723 | INFO | werkzeug | 127.0.0.1 - - [30/Dec/2020 14:01:03] "GET /list/2 HTTP/1.1" 200 -
2020-12-30 14:01:03,742 | INFO | werkzeug | 127.0.0.1 - - [30/Dec/2020 14:01:03] "PUT /list/2 HTTP/1.1" 201 -
2020-12-30 14:01:03,749 | INFO | werkzeug | 127.0.0.1 - - [30/Dec/2020 14:01:03] "DELETE /list/2 HTTP/1.1" 204 -
主要问题可能来 self 的 logger.py
中的 logging.dictConfig
,因为使用简单的 logging.basicConfig
日志是正常创建。我的 logger.py
看起来像这样:
import logging as log
from logger.config import dictConfig
dictConfig(
{
"version": 1,
"formatters": {
"precise": {
"format": "%(asctime)s | %(levelname)s | %(name)s | %(module)s | %(message)s"
},
"brief": {"format": "%(asctime)s | %(levelname)s | %(message)s"},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
"formatter": "brief",
"level": "WARNING",
},
"file": {
"class": "logging.handlers.RotatingFileHandler",
"formatter": "precise",
"filename": "logs/api.log",
"maxBytes": 1024 ** 2,
"backupCount": 1,
},
},
"root": {"level": "DEBUG", "handlers": ["console", "file"]},
}
)
在我的 __init__.py
中,我导入了 log
,这意味着我可以通过使用 log.info()
等来创建日志create_app()
或其他模块。
不过,根据Flask文档(https://flask.palletsprojects.com/en/1.1.x/logging/),也可能是我配置的时间问题导致的:
Basic Configuration
When you want to configure logging for your project, you should do it as soon as possible when the program starts. Ifapp.logger
is accessed before logging is configured, it will add a default handler. If possible, configure logging before creating the application object.
而且我注意到当 export FLASK_ENV=development
时,Werkzeug 在我的任何日志之前记录了一些东西。我很惊讶这可能是这种情况,因为使用 logging.basicConfig
来配置它,它很有魅力。我在 __init__.py
中做的第一件事就是导入记录器;这意味着我真的不能再早点做..
最佳答案
我刚刚遇到了同样的问题,在尝试解决它时,我发现了一个不太理想但可行的解决方案。
logging_tree
。使用 logging_tree.printout()
打印完整的日志记录树。“werkzeug”
具有所需的配置,但在开发环境中,相同的记录器没有配置,导致缺少日志记录。"werkzeug"
记录器添加到 dictConfig
中的记录器中我的 dictConfig
:
logging_config = dict(
version=1,
formatters={
"file": {"format": LOG_DETAILED_FORMAT},
"simple_console": {
"()": "coloredlogs.ColoredFormatter",
"format": LOG_SIMPLE_FORMAT,
},
},
handlers={
"server_console": {
"level": logging.INFO,
"class": "logging.StreamHandler",
"formatter": "simple_console",
},
"file": {
"level": logging.WARNING,
"class": "logging.handlers.RotatingFileHandler",
"filename": LOG_FILE_NAME,
"formatter": "file",
"maxBytes": 1024 * 1024 * 100, # ~100 MB
"backupCount": 10,
}
},
loggers={
"": { # Root logger
"handlers": ["server_console", "file"],
"level": logging.INFO,
"propagate": False,
},
"werkzeug": { # Flask
"handlers": ["server_console", "file"],
"level": logging.INFO,
"propagate": False,
},
},
)
此调整后,我可以看到生产日志记录和开发日志记录之间的唯一区别是第一个关于运行它的服务器 IP 的日志。在生产中,此日志以所需的方式配置,但在开发中,它只是一个普通的打印。之后,日志记录没有区别。
关于python - 当 FLASK_ENV=development 时,Werkzeug 不记录 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65508074/
我目前对 Python 中 import 如何工作的理解(基于这些答案: one 、 two 、 three ;和 Python documentation )是(以防万一:所有代码片段在 Pytho
关于导入“from flask_restplus import Api, Resource” api getting cannot import name 'cached_property from
在带有 python 3.6.8 的 Ubuntu 18.04 上,尝试安装 Airflow。当我运行airflow initdb命令时,抛出以下错误 Traceback (most recent c
从 official documentation : Werkzeug is a WSGI utility library for Python. 但是,当我运行 Flask Web 应用程序时,我注
Flask 的新手,正在学习描述如何制作 REST API 的类(class)。 类(class)作者建议使用 safe_str_cmp来自身份验证章节中的 werkzeug.security。 如果
我正在寻找一种在网页中嵌入python解释器的方法。具体来说,类似于textarea/REPL的东西,它可以访问Django模板的作用域。 Werkzeug做了类似的事情,但是我找不到任何关于嵌入过程
我有以下用于将文件返回给客户端的 Werkzeug 应用程序: from werkzeug.wrappers import Request, Response @Request.application
我的 flask 应用程序中具有以下路由 from foo import get_foo @app.route("/foo/") def foo_id(id): return render_t
我目前正在使用一个 Javascript 应用程序,该应用程序必须使用 Werkzeug 对 Web 服务进行跨域请求(我可以访问 javascript-client 和 werkzeug-serve
我有以下从 http POST 保存的文件,我想使用 werkzeug parse_form_data() 使用 Python 进行解析。请注意,我不是通过请求而是通过文件获取它。由于其他原因,我无法
当我遇到 Werkzeug Debugger 时,我正在比较 CherryPy 和 Flask ,我真的很喜欢。让我惊奇的是: 是否可以将 Werkzeug 的调试器集成到 CherryPy 中?如果
我想实现一个基于 WSGI/Werzeug 的 Web 应用程序,并且需要帮助实现基于表单的身份验证。我找到了 repoze.who 并认为它解决了我的大部分问题。它适用于我将用于我的数据库代码的 S
我想对 request.args 和 request.form 使用可变字典。 Werkzeug 和 Flask 为此数据创建一个 ImmutableMultiDict。有没有办法让它可变? 最佳答案
我正在构建一个使用 werkzeug's hashing functions 的 Python 应用程序. User 模型示例: class User(db.Model): __tablena
我正在使用 flask 和 werkzeug。为了监控从 sqlalchemy 发出的 sql 语句,我设置了一个 logging.basicConfig() 记录器并附加了 before_curso
我有一个 Flask 应用程序,它为 Django 消费者提供 API。我用 requests library在我的消费者中点击 API。 我的问题是这样的:当我测试我的 API 时,我在 reque
首先,我想确保我正确理解特征分配。分配的本地代理功能通过线程内的模块(包)共享变量(对象)。我说得对吗? 其次,用法对我来说仍然不清楚,可能是因为我误解了一个赋值。我用 flask 。如果我有两个(或
当我将表单数据发送到我的 Flask 应用程序时,出现以下错误。它说它将使用 UTF-8 编码,但语言环境已经是 UTF-8。这个错误是什么意思? /home/.virtualenvs/project
我想通过 werkzeug 传输一个大文件. 目前我的 wsgi 应用程序看起来像这样: from werkzeug.wrappers import Request, Response from we
我正在使用基于 Werkzeug 的 Flask 微框架,它使用 Python。 在每个受限页面之前都有一个装饰器来确保用户已登录,如果他们没有登录,当前会将他们返回到登录页面,如下所示: # Dec
我是一名优秀的程序员,十分优秀!