【问题标题】:How do I turn off the console logging in App Engine Channel API?如何在 App Engine Channel API 中关闭控制台日志记录?
【发布时间】:2012-05-29 16:58:14
【问题描述】:

我已经实现了具有持久性的 Channel API。当我创建一个通道并连接套接字(这是在真实的应用程序上,而不是本地的 dev_appserver 上)时,Firebug 会因日志消息而发疯。我想关闭这些功能,以便查看我的 OWN 日志,但找不到任何有关如何禁用 Channel API 控制台日志记录的文档。

我可能做的与大多​​数人不同的事情是我正在连接跨域...... Channel API 支持(注意流中的第一条消息......如果你可以查看该图片)

有人知道吗?


更新

我终于意识到我的代码正在创建两个通道并试图同时打开/连接它们......是我收到大量消息的原因。我不是故意的(我知道规则:https://developers.google.com/appengine/docs/python/channel/overview#Caveats)......这是一个错误......一旦我修复它,消息就会回到可管理的水平。

是的

【问题讨论】:

    标签: javascript google-app-engine firebug channel-api


    【解决方案1】:

    在开发服务器上,当使用 ChannelAPI 时,它本质上会降级为轮询实现,而不是使用 Comet/long-polling。因此,在您的调试器中,您会看到向服务器发出的源源不断的 HTTP 请求,以不断有条不紊地检查更新。

    本质上,这些只是 AJAX 请求,或者如 Firebug 所想的那样,XMLHttpRequests。

    由于您的浏览器负责发出这些请求,因此禁用它们的唯一方法是单击 Firebug 中“控制台”上的小箭头,然后取消选中记录 XMLHttpRequests 的选项。

    当然,这也会禁用所有其他 XMLHttpRequest 的日志记录。但是,要为安静、行为良好的 JavaScript 控制台的清晰和宁静付出一点代价。

    有关如何充分利用 Firebug 的更多有用信息,请参阅Firebug Tips and Tricks

    注意:这适用于 Python SDK 和 Java SDK 的用户。 (或 Go SDK,假设它具有等效的 ChannelAPI)。这不仅限于 Python Appengine。

    更新:

    来自getFirebug

    创建一个时间戳,可以与 HTTP 流量计时一起使用来衡量某段代码的执行时间。

    console.timeStamp 方法在 Firebug 1.8.0 中发布。上述相同的技术也可以覆盖此 Firebug 日志记录方法。

    console.timeStamp("This is the type of console logging statement that Google is using!");
    

    上面的日志语句会产生橄榄色文本。可以使用上一节中描述的相同技术禁用此方法。

    但是,Google 会在闭包内加载控制台对象,这意味着,一旦 Google 的代码被初始化,ChannelAPI 对象就会拥有自己的控制台对象副本。

    为了禁用console.timeStamp,在加载或运行其他任何东西之前,首先需要禁用它作为第一个操作。换句话说,我们需要确保 Google 只使用禁用的 console.timeStamp 方法。

    为获得最佳效果,请将此代码加载到 /_ah/channel/jsapi 脚本标记上方,以确保在加载 jsapi 之前禁用 console.timeStamp 方法:

    if(window.console) console.timeStamp = function(t) { };
    

    注意:由于 Google 以这种方式调用 Firebug 日志记录,唯一的解决方案实际上很可能需要允许以编程方式禁用此级别日志记录的错误报告或功能请求。或者,Firebug 团队可以提供一个新版本的 Firebug,其中包括显式禁用 timeStamp 日志语句的功能,类似于他们对错误、警告、XMLHttpRequests 和其他日志级别的做法。

    【讨论】:

    • 谢谢...但我想我的问题需要澄清...我不是在谈论 dev_appserver 的轮询行为。在上面查看我的编辑
    • 如果明天仍然没有答案,我将在有机会使用我的开发服务器后进一步查看它。感谢您将屏幕截图添加到您的问题中。这有帮助!
    • 尼克,我在 Firebug 1.9.2 或 1.7.3 中都看不到那些黄色消息,即使我打开了所有控制台选项。您可以尝试从this answer 借用代码,系统地一次一个地禁用您的console.info、日志等功能,直到找到罪魁祸首。可能 a) 您可以接受禁用特定的日志功能;因此,它可以解决您的问题,或者 b) 告诉我们更多关于这些消息是如何到达 Firebug 的。
    • 尼克,我已经尝试了所有我能想到的方法。我可以禁用 timeStamp,以便 我自己无法创建 timeStamp 日志语句,但 Google 的 timeStamp 日志语句似乎仍然可以通过。话虽如此,我将在此处留下我的答案以用于文档目的。虽然它没有提供问题的解决方案,但我相信您和遇到此问题的其他人会发现它很有帮助,并且如果 Appengine 团队开发人员或 Firebug 开发人员顺便来,这些信息很可能会导致解决方案。跨度>
    • 非常感谢您的努力和帮助!我暂时把这项工作放在一边,但会尽快恢复,看看我能弄清楚什么。再次感谢!
    【解决方案2】:

    似乎没有办法关闭 Firebug 时间戳日志。解决此问题的一种方法是自己编辑代码并删除此功能:

    将扩展解压到 Mozilla Firefox 配置文件中的目录:

    将目录更改为您的 Firefox 配置文件扩展目录。在 Ubuntu 上,这将是这样的:

    cd ~/.mozilla/firefox/{random-string}/extensions/
    

    Firebug 扩展由firebug@software.joehewitt.com.xpi 标识。创建一个同名但没有 .xpi 的新目录,并将 XPI 移动到该目录中:

    mkdir firebug@software.joehewitt.com
    mv firebug@software.joehewitt.com.xpi firebug@software.joehewitt.com
    

    接下来,将目录更改为新创建的 Firebug 目录,然后解压缩扩展:

    cd firebug@software.joehewitt.com
    unzip firebug@software.joehewitt.com.xpi
    

    所有文件都应该被解压,这样扩展的目录就在当前目录中。您的文件结构将如下所示:

    $: ~/.mozilla/firefox/{random-string}/extensions/firebug@software.joehewitt.com$ l
    chrome.manifest  defaults/  firebug@software.joehewitt.com.xpi  install.rdf  locale/   skin/
    content/         docs/      icons/                              license.txt  modules/
    

    $: ~/.mozilla/firefox/ghlfe0bb.ff5.0/extensions/firebug@software.joehewitt.com$

    在文本编辑器中打开 consoleExposed.js:

    接下来,切换到content/firebug/console 目录:

    cd content/firebug/console
    

    使用您喜欢的编辑器编辑consoleExposed.js 文件:

    vim consoleExposed.js
    

    禁用 console.timeStamp:

    在第 215 行或附近,您将看到以下函数:

    console.timeStamp = function(label)
    {  
        label = label || "";
    
        if (FBTrace.DBG_CONSOLE)
            FBTrace.sysout("consoleExposed.timeStamp; " + label);
    
        var now = new Date();
        Firebug.NetMonitor.addTimeStamp(context, now.getTime(), label);
    
        var formattedTime = now.getHours() + ":" + now.getMinutes() + ":" +
            now.getSeconds() + "." + now.getMilliseconds();
        return logFormatted([formattedTime, label], "timeStamp");
    };
    

    在第一个花括号之后,强制函数不返回任何内容:

    console.timeStamp = function(label)
    {   return ;   // disable timestamp by returning
        label = label || "";
    
        if (FBTrace.DBG_CONSOLE)
    

    重启 Firefox,享受没有时间戳的世界:

    编辑完成后,重启 Firebug。您不应再在控制台中看到 timeStamp 的日志消息。

    【讨论】:

    • woooooowwwwww 伙计...你是一个强烈 SO贡献者:)我不打算做所有这些,但非常感谢你的努力,希望能有所帮助未来的其他人!
    • @NickFranceschina - 你想要 XPI 吗?让我知道。我正在考虑将其发布到某个地方并在此处链接。
    • 那太棒了!我现在正在使用 webkit 来开发应用程序的这一部分......但能够留在 firefox 中会很高兴
    • 啊啊啊....我想通了。见我上面的编辑。不需要你的 XPI,但还是谢谢你,你摇滚!
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多