Android 直接打开log的一种方法

[Android]Android 直接打开log的一种方法

http://my.oschina.net/u/996206/blog/200789


针对Apk log内部控制方式是通过Log.isLoggable来控制的情况

Example: adb shell setprop log.tag.Finsky VERBOSE

一般code是这样写的: 
import android.util.Log;

public class FinskyLog 

public static final boolean DEBUG = Log.isLoggable(TAG, 2); 
private static String TAG = “Finsky”;

Log.isLoggable的实现: 
Native层处理文件:android_util_Log.cpp (\frameworks\base\core\jni)

Java 定义在Log.java \frameworks\base\core\java\android\util 
public static native boolean isLoggable(String tag, int level); 
非常有助于无source code apk的debug,比如google apk

struct levels_t {

?
1
2
3
4
5
6
jint verbose;
jint debug;
jint info;
jint warn;
jint error;
jint assert ;

}; 
static levels_t levels;

static int toLevel(const char* value) 
{

?
1
2
3
4
5
6
7
8
9
10
switch (value[ 0 ]) {
     case 'V' : return levels.verbose;
     case 'D' : return levels.debug;
     case 'I' : return levels.info;
     case 'W' : return levels.warn;
     case 'E' : return levels.error;
     case 'A' : return levels. assert ;
     case 'S' : return - 1 ; // SUPPRESS
}
return levels.info;

}

static jboolean isLoggable(const char* tag, jint level) {

?
1
2
3
4
5
6
7
8
9
10
11
String8 key;
key.append(LOG_NAMESPACE);
key.append(tag);
 
char buf[PROPERTY_VALUE_MAX];
if (property_get(key.string(), buf, "" ) <= 0 ) {
     buf[ 0 ] = '\0' ;
}
 
int logLevel = toLevel(buf);
return logLevel >= 0 && level >= logLevel;

}

参考文献:地址:http://blog.youkuaiyun.com/maybe_windleave/article/details/8742178

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值