Làm cách nào để loại trừ một số tin nhắn theo tên TAG bằng logcat Android adb?


122

Logcat cho phép lọc nhật ký nhưng nó hoạt động như thế: Bạn xác định các bộ lọc và logcat chỉ hiển thị các thông báo khớp với các bộ lọc. Nhưng có cách nào để hiển thị tất cả các bản ghi NGOẠI TRỪ một số TAG được xác định bởi các bộ lọc không?


Câu trả lời:


51

Nếu bạn đang sử dụng, adb logcatbạn có thể chuyển nó qua grep và sử dụng kết hợp ngược: Từ trang grep :

v, --invert-match Đảo ngược ý nghĩa khớp, để chọn các dòng không khớp.

Ví dụ:

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

Bạn có thể mở rộng điều này bằng cách sử dụng các biểu thức thông thường .

Dưới đây là một ví dụ về biểu thức như vậy:

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

Điều này sẽ kiểm tra một trong những điều đã cho xảy ra, grep sau đó sẽ không liệt kê chúng.


1
@zest greplà một lệnh unix tiêu chuẩn. Đối với cửa sổ, bạn có thể thử find /V "notshownmatchpattern". PS Rõ ràng, vỏ adb cũng có a grep. Nhưng nó không giống như unix tiêu chuẩn grep!
PCoder

Vâng, tôi đã tìm thấy nó rồi, findstr - mút, có thể cài đặt powershell hoặc grep (cho windows :), giống như Linux như đã được viết trong readme, nhưng không nhiều trong thực tế)
Gennadiy Ryabkin

Không có quảng cáo, tôi sẽ chỉ thích các cửa sổ để cài đặt git với các công cụ dòng lệnh git. Điều này sẽ cài đặt tất cả các công cụ dòng lệnh unix cơ bản cho windowze.
chris polzer

hoặc cài đặt clink cho các công cụ dòng lệnh unix phổ biến trên windowze
chris polzer

@PCoder bạn có thể vui lòng viết toàn bộ lệnh để làm tương tự với windows CMD không?
Raghav Satyadev

217

Bạn có thể thực hiện việc này từ trong DDMS Monitor (và cả Eclipse hoặc Android Studio) với hộp nhập biểu thức thông thường và các xác nhận nhìn về phía trước tiêu cực , ví dụ: tôi loại trừ rất nhiều tiếng ồn từ nhật ký của mình bằng cách sau:

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

("Thẻ:" không phải là một phần của biểu thức chính quy, nhưng yêu cầu LogCat chỉ áp dụng biểu thức chính quy cho trường Thẻ. Nếu bạn sử dụng thủ thuật này trong bộ lọc đã lưu thì chỉ đặt biểu thức thông thường vào hộp nhập "Thẻ" và bỏ qua tiền tố "tag:")

Trong ngăn màn hình logcat của Android Studio, bạn có thể thiết lập bộ lọc đã lưu cho việc này bằng cách mở trình đơn thả xuống ở phía trên bên phải (có thể chọn "Chỉ hiển thị ứng dụng đã chọn") và chọn Chỉnh sửa cấu hình bộ lọc. Tạo bộ lọc logcat mới và đặt ^(?!(WifiMulticast... vv. ))trong hộp Log Tag, với Regexhộp kiểm được chọn.


Giải pháp tốt cho LogCat Eclipse
Seraphim's

6
Tầm nhìn của tôi ngay lập tức bớt mờ! : D
suomi35

Đây là những gì tôi đang tìm kiếm khá lâu
ar-g

Làm việc như quyến rũ! Cảm ơn nhiều. Thêm từ "dalvikvm" trong đó. Nó khó chịu nhất trong logcat.
Atul

1
Trả lời với lọc logcat là cách thích hợp - stackoverflow.com/a/17468665/828237
kwesolowski

74

Nếu bạn muốn loại trừ hoặc lọc một số tin nhắn theo tên thẻ trong studio Android, hãy xem cửa sổ LogCat => Chỉnh sửa cấu hình Bộ lọc và nhập thông tin sau vào "theo Thẻ đăng nhập (regex):"

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

Lưu ý rằng không có khoảng trắng, điều này rất quan trọng


câu trả lời này hoạt động trong logcat của intellij 15> Chỉnh sửa cấu hình bộ lọc, đưa ra một phương thức có tiêu đề, "Tạo bộ lọc Logcat mới".
petey

1
Cảm ơn bạn. Điện thoại Lenovo Btw có rất nhiều tin nhắn nhật ký spam
Seagull

Điều này chỉ ngăn các bản ghi với thẻ đó được hiển thị cho nhật ký mặc dù. Màn hình vẫn bị ngập trong các cuộc gọi đó trong nền và nó đẩy các cuộc gọi không "tag1 | tag2 | etc" ra khỏi bộ đệm. Có cách nào xung quanh đó không?
TheBestBigAl

Câu trả lời với lọc logcat là một thích hợp - stackoverflow.com/a/17468665/828237
kwesolowski

Hoặc nếu một thẻ^(?!tag1)
Vlad

34

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

Điều này sẽ loại trừ các văn bản có nội dung WindowManager, dalvik, ...

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

Điều này sẽ loại trừ các thẻ WindowManager, dalvik, ... khỏi logcat


Một số chi tiết:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur 11/03/18

Và hơn thế nữa: BroadcastQueue | ConnextivityService | WakeLock | httpClientWrapper | RAWR | Tenor | BgTask | WifiService | BluetoothAd CHƯƠNG | UpdateStatsService | AppAd | |AdAd | | | PContextMetricsRunner))
Graeme

32

Từ shell, bạn có thể sử dụng một lệnh như:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

trong đó sẽ bao gồm tất cả các bản ghi ngoài những bản ghi có AlarmManagerServicePowerManagerServicethẻ.

(The :Sviết tắt của "im lặng", có nghĩa là không có gì sẽ được in ra cho những thẻ; các :Vviết tắt của "tiết" mà phương tiện tất cả mọi thứ sẽ được in cho tất cả các thẻ khác Các. Tài liệu Android cho logcat có thêm chi tiết các tùy chọn khác mà bạn có thể sử dụng trong các bộ lọc.)

Bạn cũng có thể sử dụng ANDROID_LOG_TAGSbiến môi trường để thiết lập các bộ lọc mặc định, ví dụ (trong bash):

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

Đây là một gợi ý tốt và hoạt động từ dòng lệnh không có đường ống. Bạn nên cập nhật câu trả lời của mình để giải thích rằng phần ": S" sẽ chỉ phát ra các thông báo Severe cho các thành phần được đặt tên (điều này hầu như không bao giờ xảy ra). Một lần nữa, câu trả lời tốt. Mọi người nên bỏ phiếu này ...
Chris Markle

1
@ChrisMarkle Theo các tài liệu đó Slà 'im lặng'. Tôi đã cập nhật câu trả lời để giải thích điều này, như bạn đề xuất.
Giàu

2
Bạn có thể lọc đầu ra logcat theo cùng một cách sử dụng biến môi trường ANDROID_LOGiahS. Tôi thấy hữu ích khi nó luôn được đặt để loại trừ một số quy trình spam hơn.
emidander

16

Kết hợp cả cái nhìn tích cực và tiêu cực để lọc mạnh mẽ hơn.

Thí dụ:

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

Các thẻ trong ngoặc đơn đầu tiên được bao gồm.

Các thẻ trong thứ hai được loại trừ.


IMHO, Đây là cách lọc nhật ký toàn diện hơn.
Ritesh Gune

4

Đây là danh sách các bộ lọc mà tôi đã sử dụng để bỏ qua nhật ký hệ thống của Samsung . cũng sẽ làm việc với các thiết bị khác.

Logcat -> Chỉnh sửa cấu hình bộ lọc -> Thẻ đăng nhập

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

Một cách dễ dàng để làm điều này là chỉ cần lọc chỉ các thẻ bạn muốn xem.

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

Sẽ chỉ đưa lên những thẻ đó.


0

Trong khung nhìn Logcat của Eclipse không có tùy chọn như vậy. Tuy nhiên, bạn có thể sử dụng cấp độ nhật ký để loại trừ bất kỳ thư nào có mức nhật ký quá thấp. Ví dụ. đặt nó thành I (nfo) sẽ không hiển thị các thông báo xóa D (ebug) và (V).


Vâng, tôi đã quên đề cập rằng tôi đang sử dụng nó trên dấu nhắc lệnh / bên trong điện thoại để đọc nhật ký. Và mỗi lần tôi chạm vào một màn hình, nó sẽ hiển thị các thông báo InputReader / InputDispatcher đang tràn ngập màn hình. Bây giờ tôi cũng thấy cài đặt các bộ lọc thành "InputReader: S InputDispatcher: S" hoạt động :) Cảm ơn đã trả lời!
Kostas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.