Every Log.d(TAG, message) lands in the device's ring buffers among the system's lines. A line carries a priority (V, D, I, W, E, F), a tag, the process ID and the message. adb logcat filters with tag:priority pairs, where *:S silences everything else, and Studio's Logcat panel uses a query language on the same fields:
adb logcat -v time -s BookNestNav:D BookNestRecompose:D # these tags only
adb logcat --pid=$(adb shell pidof -s com.example.booknest) '*:W' # this app, warnings up
adb logcat -b crash # the crash buffer alone09-25 09:18:00.762 D/BookNestNav( 5992): now at com.example.booknest.ui.nav.Catalog id=99
09-25 09:18:00.796 D/BookNestNav( 5992): now at com.example.booknest.ui.nav.BookDetail/{id}
id=99
09-25 09:18:00.904 W/BookNestNav( 5992): no book with id=99The --pid filter also surfaced a system warning about BookNest itself: W/xample.booknest: Verification of ... BoxKt.Box(...) took 143.934ms. ART was verifying Compose 234 bytecode on first use, a cold-start cost (Cold Start). Studio's panel writes the same filters as package:mine level:WARN, tag:BookNestNav, -tag~:^Glide 35,023 (a negated regular expression), is:crash and age:5m.
Keep tags to 23 characters (Log.isLoggable() rejected longer ones before Android 8.0), and don't ship chatty debug logs: guard them with BuildConfig.DEBUG or let R8 234 strip them (ProGuard Rules and Keep Lists).