Understand app behavior with logs

Bring Android app events and diagnostic context into a session so you can investigate what happened around an issue.

Logs and app events add context that screenshots cannot show, such as a failed request or a sync decision. Keep that context with the session to compare it with user actions and visible behavior.

Use app events for timeline entries. Use sendClientLog(...) for ad hoc live-session log lines.

App Events

import ai.ansight.runtime.AnsightEventType

AnsightRuntime.event(
    label = "Checkout loaded",
    type = AnsightEventType.Info,
    details = "route=/checkout",
)

AnsightRuntime.event(
    label = "Payment failed",
    type = AnsightEventType.Error,
    details = "httpStatus=500",
)

Live Client Logs

val result = AnsightRuntime.sendClientLog("Checkout loaded cartId=debug-42")

sendClientLog(...) sends the line over an active live session. It does not automatically mirror Logcat or third-party logging frameworks.

SDK Diagnostics

val callback = AnsightLogCallback { level, message, throwable ->
    Log.d("Ansight", "[$level] $message", throwable)
}

AnsightLogger.registerCallback(callback)
AnsightLogger.removeCallback(callback)

Session Properties

Ansight.registerCustomProperty("app", "region", "au")
Ansight.removeCustomProperty("app", "region")
Ansight.clearCustomProperties()

Grouped properties are sent with session.open and updated during an active live session.

Crash Candidates

Native crash hooks are installed automatically while Crash Capture is enabled. A framework or app integration can add context to the native outbox:

val candidateId = AnsightRuntime.recordCrashCandidate(
    runtime = "kotlin",
    kind = "unhandled_coroutine_exception",
    message = throwable.message,
    stack = throwable.stackTraceToString(),
    fatal = false,
    metadataJson = """{"component":"checkout"}""",
)

A non-fatal candidate is retained as context for an independently confirmed native exit; it is not a crash report by itself. Continue recording ordinary exception events when an error should appear immediately in the current timeline. Do not include secrets or personal data in messages, stacks, breadcrumbs, or metadata.