Logging with command line waitress-serve(使用命令行服务员登录-服务)
问题描述
有没有办法将服务员的服务输出记录到文件中?
我当前使用的命令是:
waitress-serve --listen=localhost:8080 --threads=1 my_app_api:app
我们使用的应用程序之前没有考虑到服务员,因此我们选择使用命令行来为其提供服务,以避免更改(至少目前是这样)。
推荐答案
TLDR服务员服务不提供这样做的方法。请参阅"如何将其记录到日志"部分。
背景
根据文档关于waitress-Serve的命令行用法,没有办法设置日志记录。请参阅arguments docs。
waitress-serve
只是一个可执行文件,以便更方便地运行您的服务器。它的源代码在这里runner.py。如果你读了它,你会发现它实际上是在为你呼唤<2-1]>。(这个代码片段不是字面上的,但在精神上是这样的)。
Waitress的文档说它不记录http流量。这不是我的工作。但它会记录自己的错误或堆栈跟踪。logging docs。如果您阅读服务生源代码,试图找到它何时记录东西,您会注意到它似乎没有记录任何地方的http流量github log search。它主要记录与套接字层有关的内容。
Waitress说如果您想记录http流量,那么您需要另一个组件。特别是,它会将您指向pastedeploy docs,这是可以为您记录http流量的某个中间件。
服务员的文档实际上对回答你的问题很有帮助,尽管不是直接和明确的。上面写着
WSGI设计是模块化的。
根据logging doc
也就是说,女服务员不会为您记录http流量。要做到这一点,您需要另一个WSGI组件,并且因为WSGI是模块化的,所以您可能可以选择一些东西。
如果您想了解它的工作原理,这里有一个很好的帖子leftasexercise.com
好的,如何将其记录下来?
使用T恤
基本上,如果您只想记录从waitress-serve
输出的相同内容,则不需要任何特殊操作。
waitress-serve --listen=localhost:8080 --threads=1 my_app_api:app | tee -a waitress-serve.log
Python日志记录
但是,如果您实际上正在寻找来自Python的标准记录器的日志记录(假设您的应用程序正在进行记录器调用,或者您想要记录http流量),那么您可以在您的Python应用程序代码中进行设置。例如,编辑您的应用程序源代码并将其设置为将日志记录到文件import logging
logging.basicConfig(filename='app.log', encoding='utf-8', level=logging.DEBUG)
http日志的PasteDeploy中间件
或者,如果您正在寻找apache类型的http日志记录,那么您可以使用类似于PasteDeploy的东西来完成它。请注意,PasteDeploy是另一个Python依赖项,因此您需要安装它。例如
pip install PasteDeploy
然后,您需要设置一个.ini
文件,该文件告诉PasteDeploy如何启动您的服务器,然后还告诉它使用TransLogger创建Apache型http日志。这里对此进行了更详细的解释logging with pastedeployini文件特定于每个应用程序,但从您的问题听起来,ini文件应该是这样的:
[app:wsgiapp]
use = my_app_api:app
[server:main]
use = egg:waitress#main
host = 127.0.0.1
port = 8080
[filter:translogger]
use = egg:Paste#translogger
setup_console_handler = False
[pipeline:main]
pipeline = translogger
app
您仍需要编辑应用程序的源代码,才能让PasteDeploy使用您的配置文件加载应用程序:
from paste.deploy import loadapp
wsgi_app = loadapp('config:/path/to/config.ini')
依赖于Web框架的自行滚动http日志记录
即使您想记录http流量,也不一定需要像PasteDeploy这样的内容。例如,如果您使用FlaskWeb框架,则可以使用after_request
修饰符:
@app.after_request
def after_request(response):
timestamp = strftime('[%Y-%b-%d %H:%M]')
logger.error('%s %s %s %s %s %s', timestamp, request.remote_addr, request.method, request.scheme, request.full_path, response.status)
return response
请参阅https://gist.github.com/alexaleluia12/e40f1dfa4ce598c2e958611f67d28966
这篇关于使用命令行服务员登录-服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用命令行服务员登录-服务
基础教程推荐
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- Python h5py-为什么我收到广播错误? 2022-09-21
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 从顶点坐标创建三角网格 2022-09-21
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 如何防止Groupby超越指数? 2022-09-22
- 如何将RPC与Volttron配合使用 2022-09-21
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- 在 pandas 中使用带有多重索引的.loc 2022-09-22