【问题标题】:Filter log messages by PID or application package in Android在 Android 中按 PID 或应用程序包过滤日志消息
【发布时间】:2012-03-11 19:40:28
【问题描述】:

我知道要过滤 Android 日志消息,我们可以使用类似

adb logcat ActivityManager:I MyApp:D *:S

但是,在我的应用程序中,我对不同的活动使用不同的TAGS,并且我只想过滤此应用程序的所有日志。最好的方法是什么?

我需要在命令中指定所有标签吗?

或者在整个应用程序中使用通用标签,唯一的选择?

在 Eclipse 中查看日志消息时,我注意到有一个名为 PID 的列和另一个名为 Application 的列(包含应用程序包的名称)两者(显然)对于不同的 Tag 相同给定的应用程序。这表明应该不仅可以通过 Tag 过滤,还可以通过 pid/package 过滤。

【问题讨论】:

  • Atul,使用 ActivityManager 获取您的应用程序 PID,然后在 PID 的基础上进行填充
  • 啊,我在看到你的评论之前更新了我的问题。是否可以通过pid进行过滤,这就是我想要做的。
  • @imrankhan 我们如何按 pid 过滤?
  • 你可以在管道中使用 grep 吗?
  • @blackbelt:是的,这会起作用,但在命令行上我只是在测试输出的样子,但实际上我必须将 logcat 命令的参数传递给库 ACRA 所以 grep in pipe 在那里不起作用。

标签: android android-logcat


【解决方案1】:

我使用的常用TAG格式如下。

以Activities 为例,我定义了一个基类Activity...

public class MyCompanyActivity extends Activity {
    protected final String TAG = this.getClass().getName();
    ...
}

所有Activities 我创建扩展Activity,例如。

public class FishActivity extends MyCompanyActivity {
    ...
}

结果是FishActivity 将有一个TAG 这是...

com.mycompany.myapp.FishActivity

然后我需要做的就是过滤com.mycompany.myapp上的logcat

【讨论】:

  • 谢谢,这种方法看起来很干净,我们甚至不需要在每个活动中声明 TAG 变量,但只是想知道使用这种方法有什么副作用吗?既然您说“我使用...”,所以我想这应该可以正常工作,对吧?
  • @AtulGoyal:我想不出有什么副作用,自从我开始进行 Android 开发以来就一直在使用这种方法。我为Application、Activity、Service 等创建了基类。因此,我永远不需要手动定义TAG,它始终可用,并以唯一的package.appname 前缀反映类名。我什至让用户通过使用 Catlog 之类的东西来帮助我调试我的应用程序,并过滤公司名称并将结果通过电子邮件发送给我。它确保我只获得与我的应用相关的信息,而不是其他可能侵犯用户隐私的信息。
  • 还有一件事,你如何过滤com.mycompany.myapp 上的logcat 当我输入adb logcat com.mycompany.myapp:I *:S 时,logcat 命令对我不起作用,但对adb logcat com.mycompany.myapp.FishActivity:I *:S 有效
  • 我不使用 adb 命令行,我在 Eclipse 中使用 DDMS 透视图(可通过 Window -> Open Perspective -> Other 获得)。我指定了一个过滤器来匹配com.mycompany.myapp.*,它工作正常。
  • 那么,没有办法让它在 Eclipse 之外工作吗?实际上我正在使用这个库ACRA 在应用程序崩溃时收集崩溃数据,因此必须在那里传递 logcat 命令的参数。 adb logcat 命令现在似乎功能并不强大:(
猜你喜欢
  • 1970-01-01
  • 2019-10-10
  • 2013-01-08
  • 1970-01-01
  • 2018-06-05
  • 2015-04-02
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多