關於web.py如何像日誌文件一樣將輸出重新複製到另一個輸出目標 或完全清除它?如何重新校正web.py中的輸出
回答
控制檯通過print
輸出發送到sys.stdout
。如果需要,您可以用打開的文件或自己的文件類對象替換此流。唯一的要求是您的自定義對象有一個write()
方法。
class MyOutputStream(object):
def write(self, data):
pass # Ignore output
import sys
sys.stdout = MyOutputStream()
print("Test") # Output is ignored
如果要訪問或恢復原始輸出流,請使用sys.__stdout__
。
sys.stdout = sys.__stdout__ # Restore stdout
不適合我。服務器輸出有: 192.168.0.123:52931 - - [27/Aug/2011 11:57:45]「HTTP/1.1 POST/params」 - 200 OK 192.168.0.123:52937 - - [27/Aug/2011 11:57:47]「HTTP/1.1 POST/params」 - 200 OK 192.168.0.123:52942 - - [27/Aug/2011 11:57:49]「HTTP/1.1 POST/params」 - 200 OK 192.168.0.123:52947 - [27/Aug/2011 11:57:50]「HTTP/1.1 POST/params」 - 200 OK – Cletrix
我再試一次,並且可以正常工作。 tks – Cletrix
'web.httpserver.sys.stderr = MyOutputStream()' 如果您不想抑制程序的其他輸出 –
您可以打印到這樣的文件:
file = open("/tmp/test.txt", "wt")
print >> file, "Foobar"
的Python還提供日誌記錄功能模塊。
但是質量問題留下了太多的解釋你想要輸出和爲什麼,因此給出一個很好的答案是不可能的。請嘗試編輯該問題以獲取更多詳細信息。
雖然這是一個古老的線程,人們跑到它可能是有興趣在此solution from the web.py cookbook
它基本上解釋瞭如何控制日誌的默認HttpServer的。
更新:
另一個解決方案是直接改變web.py的代碼和httpserver.py
打印重定向到一個文件,如建議here。
我不得不修改http://webpy.org/cookbook/logging中的示例,以便能夠將請求/響應事件記錄到文件中。基本上,除了(根據鏈接示例)傳遞的WsgiLogging實例重載init,調用函數也需要重載。
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
希望這會有所幫助,祝你好運!
RDP
擺脫它
web.config.debug =假仍然沒有幫助。一些輸出仍然完成。在文件
註釋掉行: C:\ Python27 \ LIB \站點包\網絡\ httpserver.py
行:
print >> outfile, utils.safestr(msg) ->
#print >> outfile, utils.safestr(msg)
- 1. 在web.py中使db.update的輸出靜音
- 2. wsgi/web.py在瀏覽器中輸出錯誤輸出
- 3. Web.py:如何通過web.py從
- 4. awk - 如何「重新awk」輸出?
- 5. C++中的堆棧溢出校正
- 6. 如何重新計算netfilter中的IP校驗和?
- 7. 何時需要多重比較校正?
- 8. 如何從preg_match輸出中只刪除真正的重複項?
- 9. CGI C的輸出校正,但不能從網絡請求
- 10. 重新格式化輸出中的Bash
- 11. 如何重新排列Python中的列輸出到一行?
- 12. 如何重新排列magento中輸出的順序?
- 13. 在zsh中,如何重新着色已經輸出的文本?
- 14. 如何在web.py中的不同請求之間傳輸消息?
- 15. 重定向在web.py的loadhook
- 16. Web.py mod_wsgi的自動重
- 17. 如何pystache與web.py
- 18. 如何輸出正斜槓
- 19. 如何重定向輸出?
- 20. 如何列出web.py中所有可用的URL使用情況
- 21. 在Laravel中重新排列JSON輸出
- 22. OpenCV未校準相機校正用於三維重建
- 23. 如何處理web.py中的url路徑?
- 24. 爲所需的正方形輸出重新排列代碼?
- 25. 如何在Bash中重定向輸出
- 26. 重新分配輸入/輸出流?
- 27. 如何用scapy重新計算IP校驗和?
- 28. web.py正在下載圖片
- 29. 在web.py中,如何將301重定向到另一個域?
- 30. 如何在ZF中刷新輸出
輸出什麼? HTML輸出發送到瀏覽器還是'print()'輸出發送到控制檯? –
將print()輸出發送到控制檯。 – Cletrix