其他分享
首页 > 其他分享> > 的日志的相当奇怪的行为

的日志的相当奇怪的行为

作者:互联网

我写了一个非常简单的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