Android adb logcatを使用してタグ名で特定のメッセージを除外する方法


122

Logcatはログのフィルタリングを許可しますが、そのように機能します。フィルターを定義すると、logcatはフィルターに一致するメッセージのみを表示します。しかし、フィルターで定義された一部のタグを除くすべてのログを表示する方法はありますか?


回答:


51

使用しているadb logcat場合は、grepを介してそれをパイプ処理し、逆マッチングを使用できます。grepのマンページから:

v、-invert-match一致の意味を反転して、一致しない行を選択します。

例えば:

$adb logcat | grep --invert-match 'notshownmatchpattern' 

これは、正規表現を使用して拡張できます

このような式の例を次に示します。

"/^(?:emails|tags|addresses)"

これは、指定されたいずれかが発生するかどうかをチェックし、grepはそれらをリストしません。


1
@zest grepは標準のUNIXコマンドです。Windowsの場合は、試してみてくださいfind /V "notshownmatchpattern"。PSどうやら、adbシェルにもがありgrepます。しかし、それは標準のunixと同じではありませんgrep
PCoder 2013年

ええ、私はすでにそれを見つけました、findstr-powershellまたはgrep(Windowsの場合)をインストールすることができます。これは、readmeに書かれているLinuxと同じですが、実際にはそれほど多くありません)
Gennadiy Ryabkin

毎日、私はWindowsでgitコマンドラインツールを使用してgitをインストールすることだけを考えています。これにより、windowzeのすべての基本的なUNIXコマンドラインツールがインストールされます。
クリスポルツァー2014

または、一般的なUNIXコマンドラインツールのclinkをwindowzeにインストールします
chris polzer

@PCoderは、Windows CMDで同じことを行うためのコマンド全体を記述できますか
Raghav Satyadev

217

これは、DDMSモニター(およびEclipseまたはAndroid Studio)内から、正規表現の入力ボックスと否定的な先読みアサーションを使用して行うことができます。たとえば、次のようにして、ログから多くのノイズを除外しています。

tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))

(「tag:」は正規表現の一部ではありませんが、LogCatに正規表現を[タグ]フィールドにのみ適用するように指示します。このトリックを保存済みフィルターで使用する場合は、[タグ]入力ボックスに正規表現のみを入力してください、「tag:」プレフィックスを省略します)

Android Studioのlogcatモニターペインで、右上のドロップダウン([選択したアプリケーションのみを表示]が選択されている場合があります)を開き、[フィルター構成の編集]を選択することで、このための保存されたフィルターを設定できます。新しいlogcatフィルターを作成し、^(?!(WifiMulticast... etc を配置します。チェックボックスをオン))にした状態で、[ログタグ]ボックスにRegex


Eclipse LogCatの優れたソリューション
セラフィムの

6
私の視力はすぐにぼやけなくなりました!:D
suomi35 2013年

これは私がかなり探しているものです
ar-g

魅力のように働いた!どうもありがとう。それに「dalvikvm」という単語を追加します。logcatで最も煩わしいです。
Atul

1
- logcatフィルタリングと回答は適切なものであるstackoverflow.com/a/17468665/828237
kwesolowski

74

Androidスタジオで特定のメッセージをタグ名で除外またはフィルタリングする場合は、LogCatウィンドウ=> [フィルター構成の編集]に移動し、[ログタグ(正規表現)で]に次のように入力します。

^(?!(tag1|tag2|tag3|tag4))

スペースがないことに注意してください。これは重要です


この回答は、intellij 15のlogcat> Edit Filter Configurationで機能し、「Create New Logcat Filter」というタイトルのモーダルが表示されます。
petey 2016

1
ありがとうございました。ところでLenovoの電話にはたくさんのスパムログメッセージがあります
Seagull

これは、そのタグが付いたログがログにレンダリングされないようにするだけです。モニターはまだバックグラウンドでこれらの呼び出しでいっぱいになり、「tag1 | tag2 | etc」以外の呼び出しをバッファーから押し出します。それを回避する方法はありますか?
TheBestBigAl 2017

- logcatフィルタリングと回答は適切なものであるstackoverflow.com/a/17468665/828237
kwesolowski

または、タグが1つの場合^(?!tag1)
Vlad

34

^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

これにより、WindowManager、dalvikなどのコンテンツを持つテキストが除外されます。

tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

これにより、WindowManager、dalvikなどのタグがlogcatから除外されます。


もう少し:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur

その他:(Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMode | bluetooth | NetworkMonitor | FA | BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Tenor | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Connectivity | VelvetNetworkClient | WorkerManager | EGL_emulation | chatty | gralloc | InputReader | ActivityThread | ActivityTaskManager | UsageManagerServiceDragServiceServiceDragServiceServiceDrop PContextMetricsRunner))
Graeme

32

シェルから、次のようなコマンドを使用できます。

adb logcat AlarmManagerService:S PowerManagerService:S *:V

これで、これらとは別に、すべてのログが含まれますAlarmManagerServiceし、PowerManagerServiceタグがます。

:S「サイレント」は、これらのタグに対して何も出力されないことを意味します。:V「verbose」は、他のすべてのタグに対してすべてが出力されることを意味します。logcatAndroidドキュメントには、他のオプションの詳細が記載されています。フィルター。)

ANDROID_LOG_TAGS環境変数を使用して、デフォルトのフィルターを設定することもできます(例:(bash)):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"

これは良い提案であり、パイプラインのないコマンドラインから機能します。":S"の部分は、指定されたコンポーネント(これはほとんど起こりません)のSevereメッセージのみを出力することを説明するために、回答imhoを更新する必要があります。繰り返しますが、良い答えです。人々はこれに投票すべきです...
クリスマークル2013

1
@ChrisMarkleドキュメントによると、これSは「サイレント」用です。しかし、あなたが提案するように、私はこれを説明するために答えを更新しました。
リッチ

2
環境変数ANDROID_LOG_TAGSを使用して、同じ方法でlogcat出力をフィルタリングできます。よりスパムの多いプロセスの一部を除外するように常に設定しておくと便利です。
emidander 14

16

より強力なフィルタリングのために、ポジティブとネガティブの両方の先読みを組み合わせます。

例:

(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))

最初のネストされた括弧内のタグが含まれます。

2番目のタグは除外されます。


私見、これはログをフィルタリングするより包括的な方法です。
Ritesh Gune

4

以下は、Samsungシステムログを無視するために使用しているフィルターのリストです。他のデバイスでも動作します。

Logcat->フィルター構成の編集->ログタグ

^(?!(PowerUI|PowerPlanningReceiver|BatteryService|SamsungPhoneWindowManager|MotionRecognitionService|AudioService|APM_AudioPolicyManager|SensorService|StorageManager|SignalClusterView|BatteryService|TelephonyManager|UsbDeviceManager|KeyguardUpdateMonitor|BatteryController|ActivityManager|LauncherAppsService|AppsModel|DataLoader|PackageManager|LauncherApps|ContactsImsCommon|ImsUtil|ImsSettingsProvider|DeviceConfigManager|WifiService|BackupManagerService|PersonaManagerService|DefaultDialerManager|ResourceType|NetworkUIGlobals|NetworkProxy|FileWriteThread|ReflectUtil|PhoneApp|SamsungAlarmManager|display|DeviceStorageMonitorService|wrapperGPS|io_stats|GnssLocationProvider|KeyguardServiceBoxContainer|ConnectivityService|SSRM|TLC_TIMA_PKM_initialize|mc_tlc_communication|TeeDriverClient|TLC_TIMA_PKM_measure_kernel|AutomaticBrightnessController|BatteryUtils|WifiConnectivityManager|Launcher|IconView|ApplicationPackageManager|LiveIconLoader|WifiScanningService|WifiHAL|WifiScanController|ApplicationPolicy|SELinux|TimaKeyStoreProvider|ActivityThread|zygote|GservicesProvider|GoogleHttpClient|cr_ChildProcessConnect|WificondControl|Netd|Tethering|ContactsImsCommon|ImsConstants|tnet-jni|BatteryStatsService|SignalClusterView|LiveIconManager|BitmapCacheContainer|com.samsung.android.app.powerplanning.utils.BatteryUtils|ReflectField|cr_ChildConnAllocator|TinLoadingFailTracker|WifiPermissionsUtil|EventHandler_FLP|android.hardware.wifi@1.0-service|BluetoothAdapter|bt_btm|WifiPermissionsUtil|GeofencerStateMachine|Places|GCoreUlr|BeaconBle|Sensors|SLocation|ContactsProvider_EventLog|WificondScannerImpl|AlarmManager|AlarmManagerEXT|MultiDex|NetworkSecurityConfig|DnsProxyListener|dalvik-internals|mobileconfig|SsacManager|ImsPhoneStateManager|VolteServiceModule|PdnController|PowerManagerService|GameManagerService|NoSync|SensorManager|DisplayPowerController|NetworkController|SamsungAnalytics111040|tlcFidoAuthnr|InputReader|FlashlightController|KeyguardWallpaperController|OpenGLRenderer|EasyMuteController|Vibrator|VibratorService|PowerManagerUtil|LightsService|WindowManager|InputDispatcher|InputReader|CustomFrequencyManagerService|SystemUIAnalytics|SamsungAnalytics|swipe|PanelView|BadgeCache|MARsPolicyManager|MARsDBManager|KeyguardClockPage|ScanManager|RegiMgrBase|secImsManager|GeolocationController|MultiSimUtils|CarrierText|Mms|NetworkNotificationUI2|CommandListener|ReschedulableTimer|RCS-ContactsImsCommon|Settings|DmConfigModule|NotificationMgr2|PhoneMultiSimUtils|PhoneProxy|VideoCapabilities|AudioCapabilities|SAIV_FACE|FaceController|FaceService|SamsungAnimationCreator|ImageWallpaper|Finsky|VirtualScreen|PagedView|DragLayer|HomeContainer|ImsServiceStub|DmConfigHelper|TZ))

1

これを行う簡単な方法は、表示したいタグのみをフィルタリングすることです。

adb logcat -s "Tag1" -s "Tag2" -s "Tag3"

それらのタグのみを表示します。


0

Eclipse Logcatビュー内には、そのようなオプションはありません。ただし、ログレベルを使用して、ログレベルが低すぎるメッセージを除外することができます。例:I(nfo)に設定すると、D(ebug)および(V)erboseメッセージは表示されません。


さて、コマンドプロンプトで/電話内でログを読み取るためにそれを使用していることを忘れていました。そして、私が画面をタップするたびに、画面をあふれさせているInputReader / InputDispatcherメッセージが表示されます。フィルターを "InputReader:S InputDispatcher:S"に設定することもできるようになりました:)回答ありがとうございます。
Kostas 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.