我一直认为昂贵的android Logging方法可以通过询问日志是否像这样活动来优化
import androID.util.Log; if (Log.isLoggable("MyContext",Log.DEBUG)) { Log.d("MyContext","my logging: " + callExpensiveCalculation()); }
但是当使用androID 2.2模拟器尝试这个时,我的Log.d()永远不会被调用.
所以我尝试了这段代码
Log.v(MY_CONTEXT,"VERBOSE logging is active: " + Log.isLoggable(MY_CONTEXT,Log.VERBOSE)); Log.d(MY_CONTEXT,"DEBUG logging is active: " + Log.isLoggable(MY_CONTEXT,Log.DEBUG)); Log.i(MY_CONTEXT,"INFO logging is active: " + Log.isLoggable(MY_CONTEXT,Log.INFO)); Log.w(MY_CONTEXT,"WARN logging is active: " + Log.isLoggable(MY_CONTEXT,Log.WARN)); Log.e(MY_CONTEXT,"ERROR logging is active: " + Log.isLoggable(MY_CONTEXT,Log.ERROR));
令我惊讶的是,我得到了
02-27 19:05:43.015: V/MyContext(334): VERBOSE logging is active: false02-27 19:05:43.015: D/MyContext(334): DEBUG logging is active: false02-27 19:05:43.015: I/MyContext(334): INFO logging is active: true02-27 19:05:43.015: W/MyContext(334): WARN logging is active: true02-27 19:05:43.015: E/MyContext(334): ERROR logging is active: true
因此,即使禁用了日志记录,日志记
这是androID或我的测试代码中的错误吗?
是否有其他方法可以确定调试(或其他一个日志级别)是否处于活动状态?
我使用eclipse logcat-vIEw和log-level verbose,并从eclipse开始测试并运行androID-app
解决方法 isLoggable实际上只是一种为方便起见为某些标记提供标记的机制.它实际上没有做任何事情来禁用日志记录.您的第一个代码块是正确的:if (Log.isLoggable("MyContext",Log.DEBUG)){ Log.d("MyContext","my logging: " + callExpensiveCalculation());}
这将记录或不记录,具体取决于isLoggable是返回true还是false.但是,当你这样做时(不检查isLoggable):
Log.d(MY_CONTEXT,Log.DEBUG));
它将记录,无论你调用它时返回的是什么.简而言之,如果要根据该标志启用/禁用日志记录,则需要在日志的任何位置进行检查. if语句是允许您跳过不必要的日志的部分.如果if子句为false,则永远不会运行内部代码.
总结以上是内存溢出为你收集整理的android.util.Log中的错误或功能? – Log.isLoggable(DEBUG)= false但未禁用Log.d()全部内容,希望文章能够帮你解决android.util.Log中的错误或功能? – Log.isLoggable(DEBUG)= false但未禁用Log.d()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)