在三星 Tizen 电视模拟器中没有获得正确的日志

Not getting proper logs in Samsung Tizen TV emulator

我正在使用 IDE 2.4.0_Rev5 进行开发,并 运行 在 Tizen TV 模拟器上安装我的应用程序。 我面临的问题是许多已放入 javascript 文件(使用 console.log('xyz') )的日志没有出现在控制台中 运行 正在运行应用程序,或者即使我启动了调试器,但确实会出现一些日志。

例如,我从这里获取了 AV 播放器的示例应用程序: https://github.com/Samsung/TizenTVApps/tree/master/TVDemoAvPlayer

当我 运行 应用程序时,我按下播放按钮,我只得到以下日志:

js/main.js (218) :Buffering Complete, Can play now!
js/main.js (66) :PLAYPAUSE
js/main.js (149) :Player.play(undefined)

但是,如果你查看文件,有很多日志没有出现,例如:

console.log('Main.onLoad()');    
console.log('Player.init('+id+')');
console.log('Player.prepare('+url+')');

如果看代码,肯定会控制到这些点(我也做了一些修改验证--更改url等就生效了),所以没有这些日志根本没有出现,表明我错过了一些 setting/configuration 或者 SDK/emulator.

存在一些重大问题

有没有人在使用 Tizen TV 模拟器时遇到过类似的问题?有什么办法可以解决吗?

你没有做错任何事。一开始我也遇到过同样的问题。不幸的是,由于三星设置调试环境的方式,您的一些日志在控制台 window 准备就绪之前就已输出。我们为此找到了一些解决方案。如果您在模拟器或实际电视上调试,它们都可以工作。

这个最简单的解决方案是在您的应用程序启动后在控制台中键入 location.reload()。将在不重新启动调试器的情况下重新启动应用程序。这样您就可以看到所有日志。请注意,我们在重新加载后看到了一些奇怪的行为,所以不要依赖它来进行正确的调试。但从头开始查看日志仍然是一种有效的"quick and dirty"方法。

下一个解决方案是编写一些代码来覆盖 console.log() 以缓存消息。然后您可以从控制台调用函数来播放消息。这样的东西将保留最后 200 行日志,并允许您通过调用 dumpLog() 来输出它们。 (下面的示例代码依赖于lodash。)

var proxiedLog = console.log;
var logCache = [];

console.log = function() {
  logCache.push(_.join(arguments, ", "));
  _.drop(logCache, logCache.length - 200);
  return proxiedLog.apply(this, arguments);
}

function dumpLog() {
   _.forEach(logCache, function(entry) { console.debug(JSON.stringify(entry)); });
}

但最好的方法,也是我鼓励您在发布到生产环境之前设置的方法,是将该信息发送到为您缓存日志的后端服务。您可以使用与上述设置类似的设置,您只需要将输出也发送到您的服务器即可。请务必包含一些唯一标识符,以便您可以区分来自不同设备的日志。

希望对您有所帮助。