使用命令行服务员登录-服务 [英] Logging with command line waitress-serve

查看:0
本文介绍了使用命令行服务员登录-服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法将服务员的服务输出记录到文件中?

我当前使用的命令是:

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修饰符:

编写您自己的http日志
@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

这篇关于使用命令行服务员登录-服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆