AppEngine:从浏览器记录事件(JavaScript)
有人能给我举个例子,用JavaScript将客户端事件记录到AppEngine的服务器端Python日志模块中吗?我想记录五个严重性级别相同的事件,但记录的是客户端代码,而不仅仅是服务器端代码,如中所述 如果有一个内置的日志处理程序,那就太好了。如果不是,我必须编写一个服务器端处理程序,我希望看到一个示例AppEngine:从浏览器记录事件(JavaScript),javascript,python,google-app-engine,logging,Javascript,Python,Google App Engine,Logging,有人能给我举个例子,用JavaScript将客户端事件记录到AppEngine的服务器端Python日志模块中吗?我想记录五个严重性级别相同的事件,但记录的是客户端代码,而不仅仅是服务器端代码,如中所述 如果有一个内置的日志处理程序,那就太好了。如果不是,我必须编写一个服务器端处理程序,我希望看到一个示例 对于那些好奇的人,我尝试在浏览器中构建一个UI,只与服务器进行数据通信。在浏览器中记录发生的不会触发对服务器调用的事情会很好。至于为什么要使用客户端代码来实现这一点,我不知道。但我不认为在应用
对于那些好奇的人,我尝试在浏览器中构建一个UI,只与服务器进行数据通信。在浏览器中记录发生的不会触发对服务器调用的事情会很好。至于为什么要使用客户端代码来实现这一点,我不知道。但我不认为在应用程序引擎中有默认的支持。另外,如果您想检测错误,然后将其发送回服务器进行记录,那么它将不必要地添加到您的带宽账单中 请问您为什么不想在python中使用普通的
logging.debug
、logging.info
和logging.error
?您甚至可以在管理控制台中按严重性、时间等筛选消息
编辑
等等,我理解这个权利吗-
//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
这是未经测试的,但它应该像广告中所宣传的那样工作,JavaScript并不太复杂。下面是一个模仿Python模块的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(“此处记录消息”)
处理这些请求的服务器端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)
谢谢,吉碧。当我弄清楚细节后,我将编辑您的答案,以包含示例代码,然后将其标记为已接受的答案。如果你想打败我,那就更好了。@ChristopherJamesCalo-其实很容易。如果您确实需要示例代码,请告诉我,不客气。