是否可以将所有浏览器控制台消息/错误通过管道传输到远程机器?

Posted

技术标签:

【中文标题】是否可以将所有浏览器控制台消息/错误通过管道传输到远程机器?【英文标题】:Is it possible to pipe all browser console messages/errors to a remote machine? 【发布时间】:2020-04-24 08:44:36 【问题描述】:

我目前正在尝试调试 Cordova 应用程序的 InAppBrowser(在 android 上)中发生的 javascript 错误。不幸的是,虽然我可以使用 chrome 的远程调试/检查工具连接到手机上的 web 视图,但控制台输出是空的,尽管它不应该是空的。 (无论是否遇到问题,都应该显示杂项消息/警告。)

此时,我在尝试获取控制台/错误消息时遇到了困难。似乎没有任何效果。谁能想到我可以告诉 webview/javascript 将所有错误消息转发到远程地址的方法? (显然,我永远不会发布具有这种配置的应用程序。)

【问题讨论】:

有趣 - 我从未使用过远程调试器,但有时我在控制台中查看错误的上下文 - 所以首先确保设置中没有任何下拉菜单或允许你的东西更改控制台上下文(主要的将是“顶部”)。之后,您可能需要发挥创造力 - 实现一种开发模式,将控制台错误打印到实际视图或将控制台输出发送到远程数据库(我为此使用了 firebase 来实时获取错误) 您可以使用github.com/apache/cordova-weinre。但如果这太多了,您可以覆盖 console.log 来做其他事情,比如调用 REST API。无法保证应用的性能或稳定性,如果有很多console.logs 看看 sentry.io(开发期间免费,但如果你想在生产中使用它不是免费的) 您是否尝试过将 inAppBrowser 代码中的控制台功能覆盖为您可以在手机上看到的内容,例如警报,即console.log = function()alert("Log: " + JSON.stringify(Array.from(arguments)));; 【参考方案1】:

如果是 JavaScript 错误,您可以使用 window.onerror 捕获它。我们的想法是捕获错误,然后将其发布到日志服务器。

window.onerror = function (msg, url, lineNo, columnNo, error) 
  alert(msg)
  // Log error to external server.
  // axios.post(url, JSON.stringify(msg, url, lineNo, columnNo, error))


const test = undefined

test.error

我在生产环境中执行此操作。这有助于发现错误并更快地通知我问题。

【讨论】:

【参考方案2】:

如果您有兴趣将错误和其他信息记录到另一台机器上,您可以使用Reporting API,其中使用Report-To 服务器标头(可能与其他标头一起)启用向报告端点报告指定错误.这是一些possible report types 的列表(更多详细信息请参见Network Error logging)。目前为supported in Chrome/Edge,可通过about:config in Firefox开启。

【讨论】:

以上是关于是否可以将所有浏览器控制台消息/错误通过管道传输到远程机器?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Mac 上将 Xamarin 输出通过管道传输到 less 中?

通过管道将电子邮件发送到 python 脚本

如何将 Kafka 消息通过管道传输到 docker 容器中?

是否可以将错误消息重定向到 Resin 4 中的浏览器窗口?

将所有请求通过管道传输到特定端口 - 节点 js 应用程序

通过数据管道将错误消息存储到 Redshift