的日志的相当奇怪的行为
作者:互联网
我写了一个非常简单的Android Activity:
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("TAG", "onCreate() Log call 1");
Log.d("SMS", "onCreate() Log call 2");
Log.d("TEST", "onCreate() Log call 3");
finish();
}
@Override
protected void onDestroy() {
Log.d("TAG", "onDestroy() Log call 1");
Log.d("SMS", "onDestroy() Log call 2");
Log.d("TEST", "onDestroy() Log call 3");
super.onDestroy();
}
}
我希望这会生成6条日志消息(3条来自onCreate(),3条来自onDestroy()).这是logcat:
04-14 17:31:58.363: D/TAG(18084): onCreate() Log call 1
04-14 17:31:58.363: D/TEST(18084): onCreate() Log call 3
04-14 17:31:59.905: D/TAG(18084): onDestroy() Log call 1
04-14 17:31:59.905: D/TEST(18084): onDestroy() Log call 3
可以看出,带有标签“ SMS”的行没有通过.据我所知,这还不是.问题是,为什么?
编辑:关于答案的更多细节.
马修·伯克(Matthew Burke)在下面给出了一个很好的答案.简而言之,根据logd_write.c的源代码,似乎:
>具有以下标签的日志请求将自动重定向到广播日志:
> HTC_RIL
>以RIL开头的标签
>在
> GSM
> STK
> CDMA
>电话
>短信
>否日志请求将重定向到事件日志(或系统日志,另请参见http://elinux.org/Android_Logging_System)
>所有其他日志请求都转到主日志,该日志通常是受监视的.
解决方法:
开始搜寻源代码之前,我应该已经阅读过logcat的文档.根据logcat的文档:
The Android logging system keeps multiple circular buffers for log messages, and not all of the log messages are sent to the default circular buffer.
带有SMS标签的消息将发送到无线电缓冲区,而不是主缓冲区.因此,除非您全力以赴,否则您将看不到它们.如果运行命令:
adb logcat -b radio
您应该看到丢失的日志消息.以上信息可以在https://developer.android.com/tools/debugging/debugging-log.html中找到.
现在,对于那些对代码探索感兴趣的人,以下是我的原始答案:
Log类中的方法都是作为JNI方法的println_native的包装.
println_native对其参数进行一些验证,然后调用__android_log_buf_write.
现在,后一种方法将标记参数(来自原始Log.d调用)与几个硬编码的字符串(标记SMS是此列表之一)进行比较,如果找到匹配项,则将日志消息写到另一个文件!
顺便说一下,其他需要重新路由的标签是GSM,STK,PHONE,CDMA等.
相关资料可以读入
> http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/util/Log.java.htm
> https://pdroid.googlecode.com/svn/android-2.3.4_r1/trunk/frameworks/base/core/jni/android_util_Log.cpp
> https://in-the-box.googlecode.com/svn-history/r4/trunk/InTheBoxSim/liblog/logd_write.c
> http://www.takatan.net/lxr/source/drivers/staging/android/logger.h#L33
这些不是官方链接,有时可能会消失.我将尝试查找官方链接,并于今天晚些时候进行编辑.
标签:android-logcat,android 来源: https://codeday.me/bug/20191031/1972374.html