Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
vitorpamplona avatar

Find Non Lambda Logs

  • 11 installs
  • 1.6k repo stars
  • Updated August 4, 2026
  • vitorpamplona/amethyst

Helps with ai & agent building tasks.

About

find-non-lambda-logs is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.

  • find-non-lambda-logs
  • AI & Agent Building
  • AI-coding skill

Find Non Lambda Logs by the numbers

  • 11 all-time installs (skills.sh)
  • Ranked #11,769 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vitorpamplona/amethyst --skill find-non-lambda-logs

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs11
repo stars1.6k
Last updatedAugust 4, 2026
Repositoryvitorpamplona/amethyst

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Find Non-Lambda Log Calls

Overview

Locates Log.d/i/w/e calls that use string interpolation without the lambda overload, wasting string allocation when the log level is filtered out in release builds.

When to Use

  • After merging branches that add new logging
  • Periodic audit of logging hygiene
  • After migrating android.util.Log usages to the shared Log wrapper

What to Flag

Calls with string interpolation ($ in message) that do not pass a throwable:

// FLAG - interpolation without lambda, no throwable
Log.d("Tag", "Processing ${event.id}")
Log.w("Tag", "Failed for $url")

// IGNORE - passes throwable (lambda overload doesn't accept throwable)
Log.w("Tag", "Error: ${e.message}", e)
Log.e("Tag", "Failed for $url", throwable)

// IGNORE - no interpolation (no allocation benefit from lambda)
Log.d("Tag", "Initialization complete")

Search Commands

Important: Tags can be string literals ("Tag") or variables (tag, LOG_TAG). Run both patterns for each step.

Step 1: Find interpolated Log.d/Log.i (highest priority — filtered in release)

pattern: Log\.(d|i)\("[^"]+",\s*"[^"]*\$
type: kotlin
pattern: Log\.(d|i)\(\w+,\s*"[^"]*\$
type: kotlin

Step 2: Find interpolated Log.w/Log.e without throwable

pattern: Log\.(w|e)\("[^"]+",\s*"[^"]*\$
type: kotlin
pattern: Log\.(w|e)\(\w+,\s*"[^"]*\$
type: kotlin

Then manually exclude lines where a throwable is passed as third argument (ending with , e), , throwable), etc.). Check the actual line — a catch block catching e doesn't mean e is passed to the Log call.

Step 3: Verify no android.util.Log leakage

pattern: android\.util\.Log\.(d|i|w|e|v)\(
type: kotlin

These bypass the Log.minLevel filter entirely. Exclude PlatformLog.android.kt which is the wrapper implementation.

Fix Pattern

// Before
Log.d("Tag", "Processing event ${event.id} from ${relay.url}")

// After
Log.d("Tag") { "Processing event ${event.id} from ${relay.url}" }

Do NOT Convert

  • Calls passing a Throwable parameter - the lambda overload (tag) { message } has no throwable parameter
  • Static string calls with no $ interpolation - no allocation benefit
  • Commented-out log calls

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.