我一直在尝试使用日志类来捕获使用本地存储的一些奇怪的设备特定故障。当我进入Log类并跟踪代码时,我注意到了什么似乎是一个bug。
当我调用p(String)方法时,它调用getWriter()来获取'输出'作家的实例。它会注意到输出是null所以它调用createWriter()创建它。由于我没有设置文件URL,因此执行以下代码:
if(getFileURL() == null) {
return new OutputStreamWriter(Storage.getInstance().createOutputStream("CN1Log__$"));
}
在模拟器上,我注意到该文件已创建并包含日志信息。
所以在我的应用程序中,我想在检测到错误(调试)后显示日志。我调用getLogContent()将其作为字符串检索,但它做了一些奇怪的事情:
if(instance.isFileWriteEnabled()) {
if(instance.getFileURL() == null) {
instance.setFileURL("file:///" + FileSystemStorage.getInstance().getRoots()[0] + "/codenameOne.log");
}
Reader r = new InputStreamReader(FileSystemStorage.getInstance().openInputStream(instance.getFileURL()));
我看到的主要问题是它使用的文件URL与默认编写器位置不同。由于Writer的创建没有设置文件URL,因此getLogContent方法永远不会看到记录的数据。 (我遇到的另一个问题是样式问题,即获取内容的方法不应该为实例持久地设置该内容的位置,而是另一个故事)。
作为一种解决方法,我想我可以调用" getLogContent()"在应用程序的开头应该将文件URL正确地设置在将从以后检索它的位置。我接下来会测试一下。
与此同时,这是一个Bug,还是我从用户角度理解的功能?
答案 0 :(得分:0)
更像是“未实现的功能”。这个特定的API可以追溯到LWUIT。
该方法的主要问题是我们当前正在写入日志文件,并且获取我们当前可能正在写入的内容可能是一个问题,并且可能实际上导致失败。因此,这种方法大多被放弃,转而采用更强大的碰撞保护方法。