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

AppEngine:从浏览器记录事件(JavaScript),javascript,python,google-app-engine,logging,Javascript,Python,Google App Engine,Logging,有人能给我举个例子,用JavaScript将客户端事件记录到AppEngine的服务器端Python日志模块中吗?我想记录五个严重性级别相同的事件,但记录的是客户端代码,而不仅仅是服务器端代码,如中所述 如果有一个内置的日志处理程序,那就太好了。如果不是,我必须编写一个服务器端处理程序,我希望看到一个示例 对于那些好奇的人,我尝试在浏览器中构建一个UI,只与服务器进行数据通信。在浏览器中记录发生的不会触发对服务器调用的事情会很好。至于为什么要使用客户端代码来实现这一点,我不知道。但我不认为在应用

有人能给我举个例子,用JavaScript将客户端事件记录到AppEngine的服务器端Python日志模块中吗?我想记录五个严重性级别相同的事件,但记录的是客户端代码,而不仅仅是服务器端代码,如中所述

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


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

至于为什么要使用客户端代码来实现这一点,我不知道。但我不认为在应用程序引擎中有默认的支持。另外,如果您想检测错误,然后将其发送回服务器进行记录,那么它将不必要地添加到您的带宽账单中

请问您为什么不想在python中使用普通的
logging.debug
logging.info
logging.error
?您甚至可以在管理控制台中按严重性、时间等筛选消息

编辑 等等,我理解这个权利吗-

  • 您在执行操作时,在javascript中遇到了一个错误,比如说,一个未定义的变量
  • 您想将此记录到您的应用程序引擎日志中
  • 如果是这样,您可以使用简单的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
    /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-其实很容易。如果您确实需要示例代码,请告诉我,不客气。