j2me有哪些记录解决方案?

我特别感兴趣的是轻松排除“发布”的日志记录。版本,有一个较小的包&内存占用。

有帮助吗?

解决方案

如果您正在使用Proguard进行预处理和混淆,那么您可以拥有一个简单的日志记录类。

public class Log {
  public static void debug(final String message) {
    //#if !release.build
    System.out.println(message);
    //#endif
  }
}

或者根据需要进行日志记录。现在,如果将release.build属性设置为true,则将注释掉此代码,这将导致一个空方法。 Proguard将删除所有空方法的用法 - 实际上,版本构建将删除所有调试消息。

编辑:

在库级别上思考它(我正在研究J2ME库的映射)我可能找到了更好的解决方案。

public class Log {
  private static boolean showDebug;

  public static void debug(final String message) {
    if (showDebug) {
      System.out.println(message);
    }
  }

  public static void setShowDebug(final boolean show) {
    showDebug = show;
  }
}

这样终端开发人员可以在他/她感兴趣的库中启用日志级别。如果不启用任何内容,将在最终产品混淆中删除所有日志记录代码。甜蜜:))

/ JaanusSiim

其他提示

MicroLog肯定会打赌。它是一个像Log4j这样的Java ME(J2ME)的小型日志库。它支持记录到控制台,文件,RecordStore,Canvas,Form,蓝牙,串行端口(蓝牙,IR,USB),套接字(包括SSL),UDP,Syslog,MMS,SMS,电子邮件或Amazon S3

http://sourceforge.net/projects/microlog/

您可以在proguard中使用-assumenosideeffects来完全删除您的日志记录类:

-assumenosideeffects public class logger.Logger {*;}

而不是必须预处理。

具有由Symbian修改的Sun虚拟机的Series60和UIQ手机具有标准输出重定向。

您不仅可以捕获System.out,还可以使用Throwable.printStackTrace()。

在早期的手机上,您需要编写一个挂钩到标准库服务器进程的C ++应用程序。 Symbian生成了Redirector应用程序,可以将VM标准输出捕获到控制台或文件中。

在较新的手机上,“redirect://”引入了GCF协议,可以将VM标准输出读取到Java byte []或String对象(您希望在单独的MIDlet中执行此操作),并且使用Java重写重定向器应用程序。

在Series60 3rd Edition Feature Pack 2手机(及更高版本)中使用的最新J9 VM上,您可能需要尝试“redirect:// test”。代替。

我已将 MIDPLogger 用于生产应用程序中的某个可接受级别虽然我发现它在集成到应用程序之后有更多的用途,而不是套件中的另一个Midlet等等。我还找到了 MicroLog ,但没有将它用于任何细节。

我编写了一个字节码优化器,由于类文件的格式,你可以指向classname&的UTF编码。允许您使用MyClass.someFunc()输出日志的函数(如果您想获取类型,可以处理签名),这允许您使用 LINE &amp ;;进行C样式调试。 文件宏。

使用logger类的条件编译并不能解决完全删除日志记录语句的问题,因为您经常会记录多个简单字符串。您将查找变量值,然后将它们组合成字符串,例如:WhateverLog.log(" Loaded" + someclass.size()+" foos")。

现在,如果你只遗漏WhateverLog.log的主体(如接受的解决方案中所示),你仍然会留下许多不必要的代码,包括字符串连接(以及StringBuffer创建)。这就是为什么你最好使用像proguard这样的字节码后处理工具(已经提到过)。 Proguard的-assumenosideeffects将允许其优化器不仅删除日志记录语句,而且还删除其结果仅由日志记录调用使用的所有代码。

J2ME的LWUIT框架提供了Logging表单,它可以在其中记录语句。您可以在您认为可能产生异常的每个地方添加日志。

示例:Log.getInstance()。showLog(); 通过添加上述行,您可以跟踪J2ME设备中的日志记录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top