- 浏览: 1065978 次
- 性别:
- 来自: 南昌
文章分类
- 全部博客 (276)
- 生活 (1)
- 代码之美 (22)
- Media (7)
- Android Widget (3)
- Android Intent (1)
- Android Activity (4)
- UI event handle--UI事件处理机制 (2)
- Java基础知识 (12)
- android Databases (5)
- Android 系统知识 (70)
- 平常遇到的问题与解决方法 (38)
- Android TextView/EditView (2)
- Thinking Java (1)
- android webkit (6)
- JSON (1)
- XML (4)
- HTTP (1)
- Google Weather API (1)
- android 2.3 NFC (10)
- android app (20)
- android framework (7)
- C++ (2)
- android System (5)
- Pthread (1)
- Wifi (8)
- Unix/Linux C (8)
- Android 4.0 (1)
- Mail (1)
- Smack 源码学习 (4)
- iOS (4)
- Android (1)
- git (1)
- Gallery3d (2)
- React-Natice (1)
最新评论
-
dd18349182956:
你是用的smack哪个版本?我用的smack4.1.3和sma ...
关于socket长连接的心跳包 -
xukaiyin:
全英文
getApplicationContext()与this,getBaseContext() -
裂风矢:
...
<category android:name="android.intent.category.DEFAULT" /> 惹的祸 -
xanthodont:
mark一下
XMPP——Smack -
Evilover3:
mark一下,学习了
XMPP——Smack
我们可以通过Log.isLoggable来动态开关log的输出。
http://androidxref.com/8.1.0_r33/xref/frameworks/base/core/java/android/util/Log.java
android.util.Log中的isLoggable方法解析:
/**
* Checks to see whether or not a log for the specified tag is loggable at the specified level.
*
* The default level of any tag is set to INFO. This means that any level above and including
* INFO will be logged. Before you make any calls to a logging method you should check to see
* if your tag should be logged. You can change the default level by setting a system property:
* 'setprop log.tag.<YOUR_LOG_TAG> <LEVEL>'
* Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS will
* turn off all logging for your tag. You can also create a local.prop file that with the
* following in it:
* 'log.tag.<YOUR_LOG_TAG>=<LEVEL>'
* and place that in /data/local.prop.
*
* @param tag The tag to check.
* @param level The level to check.
* @return Whether or not that this is allowed to be logged.
* @throws IllegalArgumentException is thrown if the tag.length() > 23
* for Nougat (7.0) releases (API <= 23) and prior, there is no
* tag limit of concern after this API level.
*/
public static native boolean isLoggable(String tag, int level);
其默认的等级是INFO,只有INFO以上的级别可以输出,若我们需要修改其等级,可以通过adb shell setprop TAG LEVEL这种方法来调整,或者是修改local.prop来设置
其应用可以参考
http://androidxref.com/8.1.0_r33/xref/packages/apps/DeskClock/src/com/android/deskclock/LogUtils.java
比如:
adb shell setprop log.tag.Test D
若是App,则退出APP,重新进入,即可打印Log,若是Framework,则需要执行adb shell stop
adb shell start
http://androidxref.com/8.1.0_r33/xref/frameworks/base/core/java/android/util/Log.java
android.util.Log中的isLoggable方法解析:
/**
* Checks to see whether or not a log for the specified tag is loggable at the specified level.
*
* The default level of any tag is set to INFO. This means that any level above and including
* INFO will be logged. Before you make any calls to a logging method you should check to see
* if your tag should be logged. You can change the default level by setting a system property:
* 'setprop log.tag.<YOUR_LOG_TAG> <LEVEL>'
* Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS will
* turn off all logging for your tag. You can also create a local.prop file that with the
* following in it:
* 'log.tag.<YOUR_LOG_TAG>=<LEVEL>'
* and place that in /data/local.prop.
*
* @param tag The tag to check.
* @param level The level to check.
* @return Whether or not that this is allowed to be logged.
* @throws IllegalArgumentException is thrown if the tag.length() > 23
* for Nougat (7.0) releases (API <= 23) and prior, there is no
* tag limit of concern after this API level.
*/
public static native boolean isLoggable(String tag, int level);
其默认的等级是INFO,只有INFO以上的级别可以输出,若我们需要修改其等级,可以通过adb shell setprop TAG LEVEL这种方法来调整,或者是修改local.prop来设置
其应用可以参考
http://androidxref.com/8.1.0_r33/xref/packages/apps/DeskClock/src/com/android/deskclock/LogUtils.java
63 /** * Log everything for debug builds or if running on a dev device. */ public final static boolean DEBUG = BuildConfig.DEBUG || "eng".equals(Build.TYPE) || "userdebug".equals(Build.TYPE); public final String logTag; public Logger(String logTag) { this.logTag = logTag; } public boolean isVerboseLoggable() { return DEBUG || Log.isLoggable(logTag, Log.VERBOSE); } public boolean isDebugLoggable() { return DEBUG || Log.isLoggable(logTag, Log.DEBUG); } public boolean isInfoLoggable() { return DEBUG || Log.isLoggable(logTag, Log.INFO); } public boolean isWarnLoggable() { return DEBUG || Log.isLoggable(logTag, Log.WARN); } public boolean isErrorLoggable() { return DEBUG || Log.isLoggable(logTag, Log.ERROR); } public boolean isWtfLoggable() { return DEBUG || Log.isLoggable(logTag, Log.ASSERT); }
比如:
public static final String TAG = "Test"; public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public void onCreate(){ if (DEBUG){ Log.d(TAG, "onCreate"); } }
adb shell setprop log.tag.Test D
若是App,则退出APP,重新进入,即可打印Log,若是Framework,则需要执行adb shell stop
adb shell start
发表评论
-
打印调用堆栈
2019-11-15 15:48 488平常我们遇到不清楚代码逻辑的,可以通过打印调用堆栈来理清楚,如 ... -
android:allowUndo
2018-04-25 16:51 788Android 在Android 23增加了UndoManag ... -
mipmap-xxx
2015-12-10 11:35 1108最近在看AOSP,发现mipmaps, 百度 了一下,发现有各 ... -
《Android.Programming.Pushing.the.Limits].Erik.Hellman》记录1
2015-10-29 10:56 580最近在看《Android.Programming.Pushin ... -
System.currentTimeMillis() uptimeMillis elapsedRealtime 区别
2015-10-28 20:02 1319转自http://blog.csdn.net/wutianyi ... -
GPS的开关设置
2015-09-29 18:36 2039//modify by hyxu 2015-9-30 to s ... -
DialogFragment
2015-09-25 13:56 1051public class YesNoDialog extend ... -
ANDROID L——RecyclerView,CardView导入和使用
2015-07-23 09:51 959转自http://blog.csdn.net/a3969019 ... -
IntentService 和ResultReceiver
2015-07-22 20:00 814转自[url] http://javatechig.com/a ... -
Android media媒体库分析之:分类别统计媒体文件大小
2015-07-21 20:07 554转自http://www.linuxidc.com/Linux ... -
java.lang.IllegalArgumentException: Service Intent must be explicit
2015-07-21 20:03 1307转自:http://www.2cto.com/kf/20150 ... -
Context 和Application Context
2015-02-11 15:14 883http://possiblemobile.com/2013/ ... -
ContentProviderOperation.Builder 中withValue和withValueBackReference的区别
2015-02-10 14:01 2203关于ContentProviderOperation.Buil ... -
AndroidManifest.xml的Service元素 android:process设置
2013-05-30 17:02 11491转自:http://galin.blog.sohu ... -
android中打包含有Activity以及资源文件的jar包在工程中调用
2013-05-28 15:00 1323转自:http://www.cnblogs.com/vaiya ... -
Android杂谈--内存泄露(1)--contentView缓存使用与ListView优化
2012-11-01 09:29 2836转自:http://www.cnblogs.com/louli ... -
Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
2012-10-31 14:32 1891转自:http://www.eoeandroid.com/th ... -
Animation
2012-10-30 13:41 1137转自:http://hi.baidu.com/wendaoer ... -
Android onTouchEvent和onInterceptTouchEvent
2012-10-24 15:05 1290ViewGroup里的onInterceptTouchEven ... -
Android 内存管理的相关知识
2012-10-15 14:03 1174最近在读柯元旦的《Android 内核剖析》一书的“内存管理” ...
相关推荐
`Log.isLoggable` 是Android SDK提供的一种方法,用于判断当前设备的日志级别是否允许输出特定级别的日志。这个方法可以帮助开发者控制日志信息的显示,特别是在发布版本中减少不必要的日志输出,以提高性能和保护...
SLF4J设计时考虑到兼容性,提供了桥接机制,例如SLF4J-log4j12,这个桥接器使得我们可以使用SLF4J的API,同时让日志输出由Log4j处理。桥接器的存在允许我们灵活地切换不同的日志实现,而不必修改大量的代码。 **...
此外,`Log`类还提供了`isLoggable()`方法来检查当前设定的日志级别是否允许特定的日志级别输出。 #### 四、JNI及C/C++域写设备文件 在Java层调用的`Log`类方法最终会通过JNI调用到C/C++层的实现。例如,`Log.d()`...
如果`log.isLoggable()`返回`true`,才会执行`log.log()`,这减少了在不记录日志时的计算开销。 在性能优化中,JVM(Java虚拟机)会进行一些自动优化,如数组边界检查的优化,有时甚至会展开循环来提升速度。然而,...
日志输出的优化可以显著提升应用的性能,例如标题中提到的日志优化方式:使用`log.isLoggable()`来检查日志级别,避免无用的计算。只有当日志级别开启时,才会执行`log.log()`中的详细操作,这样可以防止在不需要...
描述中提到的示例展示了如何在Java中使用条件语句和`log.isLoggable()`来检查是否需要记录日志,避免了不必要的计算。这种方式可以在不牺牲性能的情况下,确保只有需要的日志信息被记录。在日志函数中使用`log.log()...
public boolean isLoggable(LogRecord record) { if (record.getThrown() != null) { return true; } else { return false; } } ``` - **Formatter**: `Formatter`接口负责将日志记录格式化为字符串。默认...
通过在调用`log.isLoggable()`进行检查后再执行`log.log()`,可以避免在日志级别不满足时执行昂贵的计算(如`calcX()`和`calcY()`)。这是Java性能优化的一个基本策略,即延迟计算直到绝对必要时才执行。 数组和...
`if (log.isLoggable(Level.FINE))` 这一行代码确保只有在日志级别允许的情况下才会执行记录操作,避免了不必要的计算(如`calcX()`和`calcY()`)。 当涉及到性能优化时,Java虚拟机(JVM)可以进行一些自动优化,...
例如,使用`log.isLoggable()`进行条件判断,避免不必要的计算。在给定的例子中,如果日志级别设置为FINE,才会执行`calcX()`和`calcY()`的计算,从而减少无谓的性能开销。这种做法体现了对性能敏感的编程思维。 在...
`if (log.isLoggable(Level.FINE))`这一行首先检查日志级别是否允许输出FINE级别的信息,如果允许才执行`log.log()`方法,这样可以避免在不记录日志时执行昂贵的计算。 在Java中,JVM(Java虚拟机)能够进行一些...
为避免在性能敏感的代码中过度使用日志,LogUtils可能包含条件编译,比如使用`Log.isLoggable()`检查当前日志级别是否开启,或者在release版本中移除日志输出。 7. **多线程支持**: 在多线程环境中,日志输出...
通过使用`if (log.isLoggable(Level.FINE))`来判断是否需要记录日志,避免了在不必要时调用昂贵的`calcX()`和`calcY()`函数。这种做法遵循了“不要过早优化”的原则,只有在确实需要时才执行耗时的操作。 性能分析...
在日志编码方面,描述中提到的优化方法是利用 `log.isLoggable()` 检查来避免不必要的计算。这种方法确保只有在日志级别允许的情况下才会执行耗时的计算,如 `calcX()` 和 `calcY()`。这样可以显著提升性能,特别是...
为了实现日志级别控制,可以使用`Log.isLoggable()`方法检查当前日志级别是否允许输出指定级别的日志。 此外,该工具可能提供了接口或设置选项,允许开发者自定义日志文件的存储路径、文件名格式以及日志输出格式。...
例如,如果在日志记录中使用`if (log.isLoggable(Level.FINE))`条件来控制输出,可以避免不必要的格式化操作,提高性能。 总的来说,Java 8的日期和时间API是Java平台的一个重大改进,它提高了开发者的生产力,提供...
例如,通过在日志语句中使用`if (log.isLoggable())`检查,我们可以确保只有在日志级别匹配时才会执行实际的记录操作,从而减少计算开销。 Java 8引入了流(Streams) API,这是一个强大的工具,允许我们以声明式的...
日志代码的优化,如示例所示,使用`log.isLoggable()`进行条件判断,避免不必要的计算,这是一种很好的实践,可以减少无用的日志输出对性能的影响。在循环中,Java虚拟机(JVM)可以通过优化,比如数组边界检查的...
以Java为例,一个良好的日志实践是在输出时进行条件检查,如描述中所示的if (log.isLoggable(Level.FINE)) 语句,这样可以避免不必要的计算。此外,JVM能够对循环进行优化,如数组边界检查的优化和循环展开,以提高...
另一种方法是使用以下 Proguard 规则删除日志: -assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(.