首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AppEngine:从浏览器记录事件(JavaScript)

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

Stack Overflow用户
提问于 2012-03-02 14:26:58
回答 2查看 671关注 0票数 0

谁能给我展示一个用JavaScript将客户端事件记录到AppEngine的服务器端Python日志记录模块的例子?我希望记录具有相同五个严重级别的事件,但要记录来自客户端代码的事件,而不仅仅是App Engine logging docs中描述的服务器端代码。

如果有一个内置的日志处理程序,那就太棒了。如果不是这样,我必须编写一个服务器端处理程序,我希望看到一个示例。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-14 10:40:55

JavaScript并不太复杂。下面是一个模仿Python的logging模块的JavaScript模块。它使用jQuery将日志消息发送到URL为/log/debug/log/info的服务器。

代码语言:javascript
运行
复制
// 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映射。

代码语言:javascript
运行
复制
# 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)

这是日志处理程序。

代码语言:javascript
运行
复制
# 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)
票数 0
EN

Stack Overflow用户

发布于 2012-03-02 14:54:42

至于为什么要使用客户端代码来实现这一点,我想不通。但我不认为在app-engine中有对此的默认支持。此外,如果您想要检测错误,然后将其发送回服务器进行记录,这将不必要地增加您的带宽账单。

请问您为什么不想在python中使用普通的logging.debuglogging.infologging.error?您甚至可以在管理控制台中按严重程度、时间等过滤掉您的消息。

编辑

等等,我是不是理解对了-

  1. 您在javascript中遇到错误-比方说,执行操作时出现未定义的var。
  2. 您是否要将此记录到您的应用引擎日志

如果是这种情况,您可以使用简单的ajax调用来实现。下面提供的伪代码

代码语言:javascript
运行
复制
//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

这是未经测试的,但它应该像广告中所说的那样工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9529006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档