谁能给我展示一个用JavaScript将客户端事件记录到AppEngine的服务器端Python日志记录模块的例子?我希望记录具有相同五个严重级别的事件,但要记录来自客户端代码的事件,而不仅仅是App Engine logging docs中描述的服务器端代码。
如果有一个内置的日志处理程序,那就太棒了。如果不是这样,我必须编写一个服务器端处理程序,我希望看到一个示例。
对于那些好奇的人来说,我正在尝试在浏览器中完全构建一个UI,它只与服务器进行数据通信。最好记录在浏览器中发生的事情,否则不会触发对服务器的调用。
发布于 2012-03-14 10:40:55
JavaScript并不太复杂。下面是一个模仿Python的logging模块的JavaScript模块。它使用jQuery将日志消息发送到URL为/log/debug或/log/info的服务器。
// logging.js
var logging = {};
logging.log = function log(lvl, msg) {
$.ajax({
url: "/log/" + lvl,
type: "POST",
contentType: "text/plain",
data: msg,
});
};
logging.debug = function debug(msg) {
logging.log("debug", msg);
};
logging.info = function info(msg) {
logging.log("info", msg);
};
logging.warning = function warning(msg) {
logging.log("warning", msg);
};
logging.error = function error(msg) {
logging.log("error", msg);
};
logging.critical = function critical(msg) {
logging.log("critical", msg);
};
return logging;要使用它,只需像logging.info("log message here")这样调用即可。
处理这些请求的服务器端Python代码并不复杂。这是URL映射。
# main.py (some stuff omitted for clarity)
import logging
import wsgiref.handlers
from google.appengine.ext import webapp
urlmap = [(r"/log/(.+)", handlers.LoggingHandler),]
application = webapp.WSGIApplication(urlmap)
wsgiref.handlers.CGIHandler().run(application)这是日志处理程序。
# handlers.py
import logging
from google.appengine.ext import webapp
class LoggingHandler(webapp.RequestHandler):
def post(self, lvl):
if lvl not in ("debug", "info", "warning", "error", "critical",):
self.error(404)
self.response.out.write("Unknown log level %s" % lvl)
return
msg = self.request.body
getattr(logging, lvl)(msg)
response = "Message logged: %s %s" % (lvl.upper(), msg))
self.response.out.write(response)发布于 2012-03-02 14:54:42
至于为什么要使用客户端代码来实现这一点,我想不通。但我不认为在app-engine中有对此的默认支持。此外,如果您想要检测错误,然后将其发送回服务器进行记录,这将不必要地增加您的带宽账单。
请问您为什么不想在python中使用普通的logging.debug、logging.info和logging.error?您甚至可以在管理控制台中按严重程度、时间等过滤掉您的消息。
编辑
等等,我是不是理解对了-
中
如果是这种情况,您可以使用简单的ajax调用来实现。下面提供的伪代码
//JS
//Make ajax call to a method on your server, providing
//error severity, error location, page, action performed
//Python
#Method which takes in error severity, plus other details mentioned above
#Based on the severity, use either, debug, info, error methods
#(already available in the logging module)
#to log your statements, which will then be available on your admin console这是未经测试的,但它应该像广告中所说的那样工作。
https://stackoverflow.com/questions/9529006
复制相似问题