存在J2ME什么记录的解决方案?
我是很容易排除日志记录“发行版”特别感兴趣,有更小的封装和内存占用。
存在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;
}
}
这样,最终开发可以使库内他/她感兴趣的日志级别。如果没有将被启用,所有日志记录代码将在最终产品混淆被删除。 甜:)
/ Jaanus西姆
微测井是肯定的赌注。 它是Java ME(J2ME)像Log4j的一个小日志库。 它有记录到控制台支持,文件,RecordStore的,帆布,表,蓝牙,串行端口(蓝牙,红外线,USB),底座(包括SSL),UDP,系统日志,MMS,SMS,e-mail或到Amazon S3 。
http://sourceforge.net/projects/microlog/
您可以使用-assumenosideaffects中的ProGuard到completley删除您的日志类:
-assumenosideeffects public class logger.Logger {*;}
而不必预处理。
在60系列和UIQ的手机,具有由Symbian本身修改的太阳虚拟机有标准输出重定向。
您不仅可以捕捉到的System.out但Throwable.printStackTrace()也适用。
早期的手机,你需要写一个C ++应用程序挂接到标准库服务器进程。 塞班产生的重定向器应用程序,它可以捕捉虚拟机的标准输出到控制台或文件。
在较新的手机,一个“重定向://” GCF协议介绍,可以阅读VM标准输出到一个Java字节[]或String对象(你会想这样做,在一个单独的MIDlet)和重定向应用在改写Java的。
在Series 60第3版功能包2个使用手机(或更高版本)的最新J9 VM,您可能需要尝试“重定向://测试”来代替。
我用MIDPLogger在生产应用一些可接受的水平,但我发现它具有集成到应用程序,而不是另外一个MIDlet在浴室或等以后更多的使用。 我还发现, 微测井 ,但没有它使用的任何细节。
我写了一个字节码优化,因为类文件的格式,你可以指向类名和函数)的UTF编码,这可以让你的输出日志与MyClass.someFunc((你可以处理的签名,如果你想要得到的类型),它可以让你做一些喜欢使用LINE和文件宏的C风格的调试。
使用记录器类的条件编译不能解决完全删除日志语句的问题,因为你会经常登录不是一个简单的字符串更多。 你抬头变量的值,然后将它们组装成字符串,如:WhateverLog.log(“装” + someclass.size()+“的Foo”)。
现在,如果你只离开了WhateverLog.log体(如接受的解决方案所示),你仍然会留下很多不必要的代码,包括字符串连接(并因此一个StringBuffer创建)。 这就是为什么你最好使用像proguard的字节码后期处理工具(已经提到)。 Proguard的的-assumenosideeffects将允许其优化去除不仅记录语句也全部代码,其结果只会被记录调用中使用。
在J2ME的LWUIT框架提供可以有一个日志里面的语句记录形式。 你可以在每个添加日志和每一个你认为地方可能会产生异常。
实施例:Log.getInstance()showLog(); 通过加入以上行,你可以能够跟踪在J2ME设备的日志记录。