Migrate OpenTelemetry Span Events (AddEvent, RecordException, and language equivalents) to the Logs API following the accepted OTEP 4430 migration plan. Use when migrating instrumentation from span events to log-based events, reviewing code that still uses AddEvent or RecordException, or planning a codebase migration while preserving trace correlation.
68
81%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill to migrate instrumentation from the Span Event API (AddEvent, RecordException, and language equivalents) to the Logs API, following the accepted OTEP 4430 deprecation plan.
The OpenTelemetry project accepted a plan to deprecate Span.AddEvent and Span.RecordException in favor of emitting events and exceptions through the Logs API. Span Events as a concept remain valid -- they can be emitted via logs that correlate to the active span, and optionally bridged back into the span proto.
Status as of 2026-08-13: OTEP 4430 is accepted, log-based event/exception emission is specified in the Logs API, and the SDK "event to span event bridge" is specified with Development status. The trace API methods AddEvent/RecordException are not yet formally marked Deprecated in the specification -- that step is still pending. Treat existing span-event calls as migration candidates, not automatically invalid code; some SDK-specific equivalents have already changed status (for example OpenTelemetry .NET's Activity.RecordException extension is [Obsolete] in favor of Activity.AddException, which is still a span-event API).
See references/deprecation-plan.md for the full context.
manual-instrumentation skill's version index if available)AddEvent, add_event, addEvent, RecordException, record_exception, recordException, RecordError, AddException, and language-specific variantsreferences/decision-tree.md for the full classification logicreferences/migration-patterns.md for language-specific before/after patterns.exception name), reserving exception for generic handlersexception.type and exception.message (at least one is required), plus exception.stacktrace when the language/error type makes it meaningful (in Go, omit it unless an error library preserves the origin stack -- do not call runtime.Stack at the emit site)references/backward-compat.mdFollow this loop every time:
Do not mark a checklist item complete based on intent alone. Mark it complete only after confirming it in the current codebase.
For every item, report one of these statuses in the final answer:
[x] completed[~] not applicable, with a reason[ ] unresolvedInclude file references as evidence for every completed item.
[ ] All general span-event call sites identified and classified, including AddEvent / add_event / addEvent and language equivalents such as .NET ActivityEvent.[ ] All exception span-event call sites identified and classified, including RecordException / record_exception / recordException and language equivalents such as Go RecordError, Rust record_error, and .NET AddException.[ ] A LoggerProvider is configured in the SDK setup (or already existed).[ ] Each migrated event uses the Logs API with the correct event name and attributes.[ ] Each migrated exception preserves the applicable semconv attributes: exception.type and exception.message (at least one is required), plus exception.stacktrace when the language/error type makes it meaningful.[ ] Migrated log records carry the active span context for trace correlation.[ ] Call sites classified as "convert to span attributes" now use span attributes instead.[ ] Call sites classified as "remove" have been removed with justification.[ ] Backward compatibility bridge is configured if downstream systems require span events in the span envelope.[ ] No remaining span-event API call sites are left unintentionally; any retained AddEvent / RecordException / RecordError / AddException / ActivityEvent / equivalent call is justified for current-version compatibility.[ ] The changed files were re-read after implementation to verify the final state.[ ] The final answer includes this checklist, file evidence, and any remaining risks or gaps.In the final answer, include the checklist in this format:
[x] LoggerProvider configured. Evidence: src/telemetry/setup.go:42 -- added OTLP log exporter with batch processor.[~] Backward compatibility bridge. Reason: no downstream systems depend on span events in the proto envelope.[ ] Exception migration. Missing evidence; re-check required.c5d2edc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.