gpt4 book ai didi

python - 如何重定向 web.py 中的输出

转载 作者:太空狗 更新时间:2023-10-30 01:03:35 26 4
gpt4 key购买 nike

关于 web.py 如何将输出重定向到另一个输出目标像一个日志文件或完全摆脱它?

最佳答案

我必须修改 http://webpy.org/cookbook/logging 中的示例能够将请求/响应事件记录到文件中。基本上,除了(根据链接示例)传递重载 init 的 WsgiLogging 实例之外,还需要重载 call 函数。

class FileLog(WsgiLog):
def __init__(self, application):
WsgiLog.__init__(
self,
application,
logformat = '[%(asctime)s][%(name)s][%(levelname)s]: %(message)s',
debug = True,
tofile = web.config.log_tofile,
toprint = False,
file = web.config.log_file,
loglevel = logging.DEBUG
)

def __call__(self, environ, start_response):
def hstart_response(status, response_headers, *args):
out = start_response(status, response_headers, *args)
try:
logline=environ["SERVER_PROTOCOL"]+" "+environ["REQUEST_METHOD"]+" "+environ["REQUEST_URI"]+" - "+status

except err:
logline="Could not log <%s> due to err <%s>" % (str(environ), err)

self.logger.info(logline)

return out

return super(FileLog, self).__call__(environ, hstart_response)

web.config 变量在我的主函数中设置

import sys
import os
import datetime, time
import optparse
import logging
from wsgilog import WsgiLog

if __name__ == "__main__":

parser = optparse.OptionParser()


parser.add_option("--logfile", dest="logfile", default="",
help="OPTIONAL send log messages to specified file instead of std out")

(options, args) = parser.parse_args()

#P Need to "eat" all of the passed in args because webpy will try to interpret them first
sys.argv = []

webpyapp = web.application(urls, locals())

if hasattr(options, "logfile") and options.logfile != '':
web.config.log_file = options.logfile
web.config.log_toprint = False
web.config.log_tofile = True
webpyapp.run(FileLog)
else:
webpyapp.run()

这将记录请求事件和对指定文件的响应,如下所示

[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 OPTIONS /api/sessions/5399d05f41f0 - 200 OK
[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 GET /api/sessions/5399d05f41f0 - 200 OK
[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 GET /api/sessions/5399d05f41f0/tasks/ - 200 OK
[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 GET /api/sessions/5399d05f41f0/tasks//messages/?timestamp__gt=1396291350 - 200 OK

修改 FileLogger 中的“logformat”变量以更改输出在文件中的格式化方式。

据我所知,没有办法抑制 web.py 框架生成的请求/响应消息的输出。它使用自己的类(httpserver.py 中的 LogMiddleware)来打印事件。 FileLogger 只是将自己添加到各种记录器中,它不会取代 LogMiddleware。

一旦您根据需要将日志记录到文件中,您可以将 stdout 和 stderr 的输出重定向到/dev/null;

./yourapp.py > /dev/null 2> /dev/null

希望这对您有所帮助,祝您好运!

数据采集

关于python - 如何重定向 web.py 中的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com