AppEngine:从浏览器记录事件(JavaScript)

2024-06-02 06:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能给我演示一个用JavaScript将客户端事件记录到AppEngine服务器端Python日志模块的示例吗?我想记录相同五个严重级别的事件,但要从客户端代码,而不仅仅是App Engine logging docs中描述的服务器端代码。在

如果有一个内置的日志处理程序,那就太好了。如果不是,而且我必须编写一个服务器端处理程序,我想看看一个例子。在

对于那些好奇的人,我尝试在浏览器中构建一个只与服务器进行数据通信的UI。最好将浏览器中发生的事情记录下来,否则不会触发对服务器的调用。在


Tags: 模块代码app处理程序客户端示例logging记录
2条回答

至于为什么你想用客户端代码来实现这一点,我不明白。但我不认为appengine中有默认的支持。另外,如果你想检测你的错误,然后把它发送回你的服务器进行记录,它将不必要地增加你的带宽账单。在

请问您为什么不想在python中使用普通的logging.debuglogging.info和{}?您甚至可以在管理控制台中按严重性、时间和其他条件筛选出您的消息。在

编辑

等等,我明白吗-

  1. 在执行一个操作时,您在javascript中遇到了一个错误,比如说,一个未定义的var。在
  2. 你想将此记录到你的应用引擎日志中吗

如果是这种情况,可以使用简单的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

这是未经测试的,但它应该像宣传的那样工作

JavaScript并不太复杂。这是一个以Python的^{}模块为模型的JavaScript模块。它使用jQuery将日志消息发布到服务器上,URL为/log/debug或{}。在

// 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映射。在

^{pr2}$

这是日志处理程序。在

# 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)

相关问题 更多 >