【问题标题】:Missing logcat messages缺少 logcat 消息
【发布时间】:2017-07-09 01:52:25
【问题描述】:

我有两个班级,A1A2。两者都继承自BaseActivity,后者又继承自AppCompatActivity

BaseActivity 有大量的日志记录语句来跟踪,例如,活动生命周期方法。像这样:Log.d(tag, "in onCreate");

正如预期的那样,这些消息是从A1 记录的,但不是来自A2!我尝试从 AS 和命令行监视 logcat。我可以在几个 Android 模拟器和几个开发环境中重复这个问题。

如果我简单地将Log.d(tag, "in onCreate") 替换为System.out.println(tag + ": in onCreate"),则会出现所有预期的消息。

在这一点上完全被迷惑了。有人对我的日志消息的去向有任何建议吗?

编辑添加:

我已将所有对 Log.d 的调用替换为对以下方法的调用:

private void log(String message) {
    Log.d("LOGGER", tag);
    Log.d(tag, message);
    System.out.println(tag + ": " + message);
}

这是两个子类的示例输出:

07-09 10:26:42.036 9657-9657/net.callmeike.android.latest D/LOGGER: A1
07-09 10:26:42.036 9657-9657/net.callmeike.android.latest D/A1: in onCreate
07-09 10:26:42.036 9657-9657/net.callmeike.android.latest I/System.out: A1: in onCreate

07-09 10:27:10.837 9657-9657/net.callmeike.android.latest D/LOGGER: A2
07-09 10:27:10.837 9657-9657/net.callmeike.android.latest I/System.out: A2: in onCreate

看来变量tag 实际上是导致问题的原因。有人知道为什么吗?

FWIW:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="false"
    android:theme="@style/AppTheme"
    >
    <activity
        android:name=".A1"
        android:label="@string/a1_name"
        android:theme="@style/AppTheme.NoActionBar"
        >
    </activity>

    <activity
        android:name=".A2"
        android:label="@string/a2_name"
        android:theme="@style/AppTheme.NoActionBar"
        >

        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>

编辑添加:三个 Activity 相关类的来源:

public abstract class BaseActivity extends AppCompatActivity {
    private final String tag;
    private final int layout;

    public BaseActivity(String tag, int layout) {
        this.tag = tag;
        this.layout = layout;
    }

    protected abstract void test();

    @Override
    protected final void onCreate(Bundle savedInstanceState) {
        Log.d(tag, "in onCreate");
        super.onCreate(savedInstanceState);
        setContentView(layout);

        setSupportActionBar(findViewById(R.id.toolbar));

        findViewById(R.id.fab).setOnClickListener(this::makeSnackbar);
    }

    final void makeSnackbar(View v) {
        Snackbar.make(v, R.string.action_test, Snackbar.LENGTH_LONG)
            .setAction(R.string.action_test, v1 -> test())
            .show();
    }

    // blah blah blah
}

// BaseActivity logs show up in logcat
public class A1 extends BaseActivity {
    private static final String TAG = "A1";

    public A1() {
        super(TAG, R.layout.activity_a1);
    }

    @Override
    protected void test() {
        // blah blah blah
    }
}

// BaseActivity logs do not show up in logcat
public class A2 extends BaseActivity {
    private static final String TAG = "A2";

    public A2() {
        super(TAG, R.layout.activity_a2);
    }

    @Override
    protected void test() {
        // blah blah blah
    }
}

【问题讨论】:

  • 您能否发布您的 java src 以显示您如何定义 A1A2 类?
  • 当然!我完全希望它有所帮助!
  • 你不应该在你的活动中实现构造函数...
  • 这是一个有根据的猜测,您的子类的标签没有被使用,因此您只能看到“一种”类型的日志记录
  • @G.BlakeMeike 感谢您的更正,我的意思是默认构造函数。

标签: android logging


【解决方案1】:

我遇到了类似的问题 - Log 命令没有显示我的一些日志消息。
我发现 logcat 不会显示一些“非法”标签。
就我而言,它是“SMS”标签。尝试将坏标签换成其他标签。
你可以看看这里 - LogCat won't show my logs.
我搜索了文档,但找不到任何“非法”标签列表。

【讨论】:

  • 恭喜,@TDG。也就是说,显然它。我是说WTF?有些事情你就是不能让 Logger 说出来?好伤心。这里有一个想法:除了“SMS”,它不会记录“A​​T”。我想知道允许记录调制解调器命令是否存在一些安全风险?非常感谢。这让我发疯了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多