Android adb logcat kullanarak belirli mesajlar TAG adına göre nasıl hariç tutulur?


Yanıtlar:


52

Eğer kullanıyorsanız adb logcat, onu grep içinden geçirebilir ve ters eşlemesini kullanabilirsiniz: grep man sayfasından :

v, --invert-match Eşleşmeyen satırları seçmek için eşleme anlamını ters çevirin.

Örneğin:

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

Bunu normal ifadeler kullanarak genişletebilirsiniz .

İşte böyle bir ifadeye bir örnek:

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

Bu, verilenlerden herhangi birinin olup olmadığını kontrol eder, grep bu durumda bunları listelemez.


1
@zest grep, standart bir unix komutudur. Windows için deneyebilirsiniz find /V "notshownmatchpattern". PS Görünüşe göre, adb kabuğunun da bir grep. Ancak standart unix ile aynı değil grep!
PCoder

Evet, buldum zaten, findstr - emmek, powershell veya grep yüklemek mümkün (Windows için :), Benioku'da
yazılan

Hiç reklam yok, Windows'a git komut satırı araçlarıyla git yüklemesini tavsiye ederim. Bu, windowze için tüm temel unix komut satırı araçlarını kuracaktır.
chris polzer

veya windowze'da yaygın unix komut satırı araçları için clink'i yükleyin
chris polzer

@PCoder, Windows CMD ile aynı şeyi yapmak için tüm komutu yazabilir misiniz?
Raghav Satyadev

217

Bunu, DDMS Monitor (ve ayrıca Eclipse veya Android Studio) içinden normal ifade giriş kutusu ve negatif ileriye dönük iddialarla yapabilirsiniz , örneğin, aşağıdakilerle günlüğümden çok fazla gürültü çıkarıyorum:

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

("Etiket:" normal ifadenin bir parçası değildir, ancak LogCat'e normal ifadeyi yalnızca Etiket alanına uygulamasını söyler. Bu numarayı kaydedilmiş bir filtrede kullanırsanız, "Etiket" giriş kutusuna yalnızca normal ifadeyi koyun ve "tag:" önekini atlayın)

Android Studio'nun logcat monitör bölmesinde, sağ üstteki açılır menüyü açıp ("Yalnızca seçili uygulamayı göster" seçeneği seçili olabilir) ve Filtre Yapılandırmasını Düzenle'yi seçerek bunun için kaydedilmiş bir filtre oluşturabilirsiniz. Yeni bir logcat filtresi oluşturun ve koyun ^(?!(WifiMulticast... vb. Onay kutusu işaretlenmiş olarak ))Günlük Etiketi kutusunda Regex.


Eclipse LogCat için iyi çözüm
Seraphim

6
Görüşüm hemen daha az bulanık! : D
suomi35

Bir süredir aradığım şey bu
ar-g

Cazibe gibi çalıştı! Çok teşekkürler. İçinde "dalvikvm" kelimesini de ekleyin. En çok logcat'de can sıkıcı.
Atul

1
Logcat

74

Android Studio'da belirli mesajları etiket adına göre hariç tutmak veya filtrelemek istiyorsanız, LogCat window => Edit Filter configuration'a gidin ve "by Log Tag (regex)" altına şunu girin:

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

Boşluk olmadığını unutmayın, bu önemlidir


bu yanıt, intellij 15'in "Yeni Logcat Filtresi Oluştur" başlıklı bir modal getiren logcat> Filtre Yapılandırmasını Düzenle bölümünde çalışır.
petey

1
Teşekkür ederim. Btw Lenovo telefonlarında çok sayıda spam günlük mesajı var
Mart

Bu, yalnızca bu etikete sahip günlüklerin günlüğe işlenmesini engeller. Monitör hala arka planda bu aramalarla dolup taşıyor ve "tag1 | tag2 | etc" olmayan çağrıları arabellekten dışarı iter. Bunun bir yolu var mı?
TheBestBigAl


Veya bir etiket^(?!tag1)
Vlad

34

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

Bu, WindowManager, dalvik, ... içeriğine sahip metinleri hariç tutacaktır.

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

Bu, WindowManager, dalvik, ... etiketlerini logcat'ten hariç tutacaktır.


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

Ve daha fazlası: (Gnss | NetRec | ÇözümleyiciController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMode | bluetooth BroadcastQueue | ConnextivityService | Uyandırma kilidi | HttpClientWrapper | RAWR | Tenor | BgTask | WifiService | Bluetooth bağdaştırıcı | UpdateStatsService | AppIdleHistory | Bağlantı | VelvetNetworkClient | WorkerManager | EGL_emulation | konuşkan | gralloc | InputReader | ActivityThread | ActivityTaskManager | UsageStatsService | ocess.gservice | DropBoxManagerService | EventLogChimeraService | PContextMetricsRunner))
Graeme

32

Kabuktan aşağıdaki gibi bir komut kullanabilirsiniz:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

AlarmManagerServiceve PowerManagerServiceetiketlerine sahip olanlar dışındaki tüm günlükleri içerecektir .

( :S"Sessiz" anlamına gelen :Vkısaltmalar , bu etiketler için hiçbir şeyin yazdırılmayacağı anlamına gelir; "ayrıntılı" anlamına gelen kısaltmalar, diğer tüm etiketler için her şeyin yazdırılacağı anlamına gelir. Logcat için Android belgelerinde , kullanabileceğiniz diğer seçenekler hakkında daha fazla ayrıntı vardır. filtreler.)

ANDROID_LOG_TAGSVarsayılan filtreleri ayarlamak için ortam değişkenini de kullanabilirsiniz , örneğin (bash içinde):

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

Bu iyi bir öneridir ve ardışık düzen olmadan komut satırından çalışır. Yanıt imho'yu güncellemelisiniz ki ": S" kısmının sadece adlandırılmış bileşenler için (neredeyse hiç gerçekleşmeyen) Şiddetli mesajlar vereceğini açıklayın. Yine güzel cevap. İnsanlar bu bir ... yukarı Oylamalıyız
Chris Markle

1
@ChrisMarkle Dokümanlara göre S"sessiz". Yine de önerdiğiniz gibi, bunu açıklamak için cevabı güncelledim.
Rich

2
ANDROID_LOG_TAGS ortam değişkenini kullanarak logcat çıktısını aynı şekilde filtreleyebilirsiniz. Daha spam içerikli işlemlerden bazılarını her zaman dışlayacak şekilde ayarlanmasını yararlı buluyorum.
emidander

16

Daha güçlü filtreleme için hem pozitif hem de negatif bakış açısını birleştirin.

Misal:

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

İlk iç içe parantez içindeki etiketler dahildir.

Saniyedeki etiketler hariçtir.


IMHO, Bu, günlükleri filtrelemenin daha kapsamlı bir yoludur.
Ritesh Gune

4

İşte Samsung sistem günlüklerini yok saymak için kullandığım filtrelerin bir listesi . diğer cihazlarla da çalışır.

Logcat -> Filtre Yapılandırmasını Düzenle -> Günlük Etiketi

^(?!(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

Bunu yapmanın kolay bir yolu, yalnızca görmek istediğiniz etiketleri filtrelemektir.

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

Yalnızca bu etiketleri getirecektir.


0

Eclipse Logcat görünümünde böyle bir seçenek yoktur. Bununla birlikte, günlük seviyesi çok düşük olan herhangi bir mesajı dışlamak için günlük seviyesinden yararlanabilirsiniz. Örneğin. I (nfo) olarak ayarlamak D (ebug) ve (V) erbose mesajlarını göstermez.


Günlükleri okumak için komut isteminde / telefonun içinde kullandığımı söylemeyi unuttum. Ve bir ekrana her dokunduğumda, ekranı dolduran InputReader / InputDispatcher mesajlarını gösteriyor. Şimdi filtreleri "InputReader: S InputDispatcher: S" olarak ayarlamayı da görüyorum :) Cevabınız için teşekkürler!
Kostas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.