登录J2ME

时间:2008-09-23 12:21:17

标签: logging java-me mobile mobile-phones

j2me有哪些记录解决方案?

我特别感兴趣的是轻松排除“发布”版本的日志记录,以便拥有更小的软件包和版本。内存占用。

8 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:12)

如果您正在使用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

答案 2 :(得分:7)

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

-assumenosideeffects public class logger.Logger {*;}

而不是必须预处理。

答案 3 :(得分:3)

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

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

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

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