如何按应用程序过滤Android logcat输出?我需要这个,因为当我附加设备时,由于来自其他进程的垃圾邮件,我无法找到我想要的输出。
答案 0 :(得分:46)
编辑:原文如下。当一个Android Studio不存在时。但是如果你想过滤整个应用程序,我会使用pidcat进行终端查看或Android Studio。使用pidcat而不是logcat,标签不需要是应用程序。您可以使用pidcat com.your.application
您应该使用自己的标记,请查看:http://developer.android.com/reference/android/util/Log.html
像。
Log.d("AlexeysActivity","what you want to log");
然后当你想阅读日志时使用>
adb logcat -s AlexeysActivity
过滤掉所有不使用相同标签的内容。
答案 1 :(得分:35)
根据http://developer.android.com/tools/debugging/debugging-log.html:
这是一个过滤器表达式的示例,它禁止除标记为“ActivityManager”,优先级为“Info”或更高版本的所有日志消息,以及标记为“MyApp”的所有日志消息,优先级为“Debug”或更高:
adb logcat ActivityManager:I MyApp:D *:S
上述表达式中的最后一个元素*:S将所有标记的优先级设置为“silent”,从而确保只显示带有“View”和“MyApp”的日志消息。
答案 2 :(得分:25)
您好我通过使用此解决方案得到了解决方案:
您必须从终端执行此命令。我得到了结果,
adb logcat | grep `adb shell ps | grep com.package | cut -c10-15`
答案 3 :(得分:19)
我正在使用Android Studio,有一个很好的选项来使用包名来获取消息。 在“编辑过滤器配置”中,您可以通过在“按包名称”上添加包名称来创建新过滤器。
答案 4 :(得分:12)
如果你能记住你的日志来自额外的终端窗口这一事实,我可以推荐pidcat(只取包名并跟踪PID变化。)
答案 5 :(得分:11)
假设名为MyApp的应用程序包含以下组件。
要使用logcat过滤应用程序MyApp的日志记录输出,请键入以下内容。
adb logcat MyActivity1:v MyActivity2:v MyActivity3:v MyService:v *:s
但是,这需要您了解应用程序中所有组件的TAG名称,而不是使用应用程序名称MyApp进行过滤。有关详细信息,请参阅logcat。
允许在应用程序级别进行过滤的一种解决方案是为每个独特的TAG添加前缀。
现在可以使用TAG前缀在logcat输出上执行通配符过滤器。
adb logcat | grep MyApp
结果将是整个应用程序的输出。
答案 6 :(得分:10)
把它放到applog.sh
#!/bin/sh
PACKAGE=$1
APPPID=`adb -d shell ps | grep "${PACKAGE}" | cut -c10-15 | sed -e 's/ //g'`
adb -d logcat -v long \
| tr -d '\r' | sed -e '/^\[.*\]/ {N; s/\n/ /}' | grep -v '^$' \
| grep " ${APPPID}:"
然后:
applog.sh com.example.my.package
答案 7 :(得分:7)
当我们从应用程序中收到一些错误时,Logcat会自动显示会话过滤器。我们可以自己创建会话过滤器。只需添加一个新的logcat过滤器,填写过滤器名称表单。然后使用您的应用程序包填充应用程序名称。 (例如:我的申请是“Adukan”,包是“com.adukan”,所以我用应用程序包填写“com.adukan”)
答案 8 :(得分:6)
如果你使用Eclipse,你可以像应用程序那样过滤,就像shadmazumder提供的Android Studio一样。
只需转到 logcat ,点击显示保存的过滤器视图,然后添加新的logcat过滤器。它将显示如下:
然后为过滤器添加名称,并在按应用程序名称指定应用程序的包。
答案 9 :(得分:5)
在我的Windows 7笔记本电脑上,我使用' adb logcat |找到" com.example.name"'从其余部分过滤与系统程序相关的logcat输出。 logcat程序的输出通过管道输入到find命令。每行包含' com.example.name'输出到窗口。双引号是find命令的一部分。
要包含我的Log命令的输出,我使用包名称,这里" com.example.name",作为我的Log命令中第一个参数的一部分,如下所示:
Log.d("com.example.name activity1", "message");
注意:我的三星Galaxy手机输出的节目相关输出要少得多 比17级模拟器。
答案 10 :(得分:2)
这可能是最简单的解决方案。
除了Tom Mulcahy的解决方案之外,您还可以进一步简化它,如下所示:
alias logcat="adb logcat | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"
使用方法与普通别名一样简单。只需在shell中输入命令:
logcat
别名设置使它变得更方便。正则表达式使得它对多进程应用程序具有可靠性,假设您只关心主进程。
您可以根据需要为每个流程设置更多别名。或者使用hegazy的解决方案。 :)
此外,如果要设置日志记录级别,则为
alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"
答案 11 :(得分:1)
通常,我在提示符中执行此命令“adb shell ps”(允许查看正在运行的进程),并且可以发现应用程序的pid。有了这个pid,请转到Eclipse并编写pid:XXXX(XXXX是应用程序pid)然后日志输出被此应用程序过滤。
或者,以更简单的方式...在Eclipse的logcat视图中,搜索与所需应用程序相关的任何单词,发现pid,然后通过pid“pid:XXXX”进行过滤。
答案 12 :(得分:1)
我通常采用的是 PID 的单独过滤器,它等同于当前会话。但是每次运行应用程序时它都会发生变化。不好,但这是获取应用程序所有信息的唯一方式,无论日志标记如何。
答案 13 :(得分:1)
是的,现在你会自动获得....
更新到AVD 14,其中logcat将自动session filter
在哪里过滤登录您的特定应用程序(包)
答案 14 :(得分:1)
我的.bash_profile函数,可能有任何用处
logcat() {
if [ -z "$1" ]
then
echo "Process Id argument missing."; return
fi
pidFilter="\b$1\b"
pid=$(adb shell ps | egrep $pidFilter | cut -c10-15)
if [ -z "$pid" ]
then
echo "Process $1 is not running."; return
fi
adb logcat | grep $pid
}
alias logcat-myapp="logcat com.sample.myapp"
用法:
$ logcat-myapp
$ logcat com.android.something.app
答案 15 :(得分:1)
在logcat视图的左侧,您有"已保存的过滤器"视窗。在这里,您可以按应用程序名称添加新的logcat过滤器(例如,com.your.package)
答案 16 :(得分:1)
您可以在Eclipse logcat中通过在搜索字段中输入以下内容来实现此目的。
app:com.example.myapp
com.example.myapp是应用程序包名称。
答案 17 :(得分:1)
我用它将它存储在一个文件中:
int pid = android.os.Process.myPid();
File outputFile = new File(Environment.getExternalStorageDirectory() + "/logs/logcat.txt");
try {
String command = "logcat | grep " + pid + " > " + outputFile.getAbsolutePath();
Process p = Runtime.getRuntime().exec("su");
OutputStream os = p.getOutputStream();
os.write((command + "\n").getBytes("ASCII"));
} catch (IOException e) {
e.printStackTrace();
}
答案 18 :(得分:1)
答案 19 :(得分:0)
我在商店找到了一个可以显示日志名称/进程的应用程序。 由于Android Studio只是在其他进程生成的日志上放置(?),因此我发现知道哪个进程生成此日志很有用。但是这个应用程序仍然缺少进程名称的过滤器。你可以找到它here。
答案 20 :(得分:0)
在Linux / Un * X / Cygwin上,您可以使用此命令获取项目中所有标记的列表(每个标记后附加:V
)(因为可读性而分开):
$ git grep 'String\s\+TAG\s*=\s*' | \
perl -ne 's/.*String\s+TAG\s*=\s*"?([^".]+).*;.*/$1:V/g && print ' | \
sort | xargs
AccelerometerListener:V ADNList:V Ashared:V AudioDialog:V BitmapUtils:V # ...
它涵盖了定义标签的两种方式定义的标签:
private static final String TAG = "AudioDialog";
private static final String TAG = SipProfileDb.class.getSimpleName();
然后将它用于adb logcat。
答案 21 :(得分:0)
在sdk / tools / monitor下可用的Android设备监视器应用程序有一个logcat选项,可按应用程序名称'进行过滤。您输入应用程序包名称的位置。
答案 22 :(得分:0)
为日志标记使用完全限定的类名:
public class MyActivity extends Activity {
private static final String TAG = MyActivity.class.getName();
}
然后
Log.i(TAG, "hi");
然后使用grep
adb logcat | grep com.myapp
答案 23 :(得分:0)
使用第一个参数作为您的应用程序名称。 Log.d( “your_Application_Name”, “消息”);
并在LogCat中:创建过滤器--->过滤器名称&按日志标记:等于'your_Application_Name' 它将为您的应用程序创建新选项卡。
答案 24 :(得分:-1)
点击logcat左上角的“+”按钮,在“过滤器名称”中添加应用程序包。
答案 25 :(得分:-2)
在命令行上过滤日志使用以下脚本
adb logcat com.yourpackage:v
答案 26 :(得分:-5)
可以过滤日志cat输出,以便仅使用这些参数显示包中的消息。
adb com.your.package:I *:s
编辑 - 我很快就采访了。
adb com.your.package:v