【问题标题】:Is this a bug in the Log class in CodenameOne?这是 CodenameOne 中 Log 类中的错误吗?
【发布时间】:2016-05-20 12:12:32
【问题描述】:

我一直在尝试使用日志类来使用本地存储来捕获一些奇怪的特定于设备的故障。当我进入 Log 类并跟踪代码时,我注意到似乎是一个错误。

当我调用 p(String) 方法时,它会调用 getWriter() 来获取 Writer 的“输出”实例。它会注意到输出为空,因此它调用 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 的创建没有设置 File URL,getLogContent 方法将永远不会看到记录的数据。 (我遇到的另一个问题是样式问题,即获取内容的方法不应该为实例持续设置该内容的位置,但这是另一回事。

作为一种解决方法,我认为我可以在应用程序的开头调用“getLogContent()”,它应该将文件 url 正确设置在稍后将检索它的位置。接下来我会测试一下。

同时,这是一个错误,还是我从用户角度不理解的功能?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    它更像是“未实现的功能”。这个特定的 API 可以追溯到 LWUIT。

    该方法的主要问题是我们当前正在写入日志文件并获取我们当前可能正在写入的内容可能是一个问题,并且实际上可能导致失败。因此,这种方法大多被放弃,取而代之的是更强大的碰撞保护方法。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 2011-09-28
      • 2017-07-23
      • 2012-09-15
      • 2017-03-22
      • 1970-01-01
      相关资源
      最近更新 更多