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?
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:
Nếu bạn đang sử dụng, adb logcat
bạ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.
grep
là 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
!
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 Regex
hộp kiểm được chọn.
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
^(?!tag1)
^(?!.*(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
^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
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ó AlarmManagerService
và PowerManagerService
thẻ.
(The :S
viế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 :V
viế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_TAGS
biế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"
S
là '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.
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ừ.
Đâ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))
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ẻ đó.
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).