Add OpenTelemetry logging backend - #141
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 04b6db329e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Adds a new OpenTelemetry backend for Spine Logging (plus an optional OTLP/HTTP bootstrap module) and updates surrounding build/infra tooling (Gradle wrapper, build cache, dependency/version catalog, dependency report generation, CI workflows, and agent/config sync) to support the new modules and the repo’s current conventions.
Changes:
- Introduce
backends/otel-backend(SpineLogData→io.opentelemetry.kotlinlog records, including log-based events viaEVENT_NAME/logEvent). - Add
backends/otel-backend-bootstrapto build/install a native Kotlin OpenTelemetry OTLP/HTTP pipeline and wire it intoOtelBackendSettings. - Refresh build/infra: Gradle wrapper + properties, dependency/version updates, dependency-report generation improvements, and CI workflow updates.
Reviewed changes
Copilot reviewed 208 out of 221 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| version.gradle.kts | Bump published version to 2.0.0-SNAPSHOT.418. |
| settings.gradle.kts | Register new otel-backend and otel-backend-bootstrap modules. |
| gradlew.bat | Gradle wrapper script update (generated file). |
| gradlew | Gradle wrapper script update (generated file). |
| gradle/wrapper/gradle-wrapper.properties | Gradle wrapper distribution update + retry settings. |
| gradle.properties | Enable Gradle build cache + expand daemon JVM args. |
| docs/project.md | Add a project template doc. |
| CLAUDE.md | Update Claude-specific agent notes / pointers. |
| buildSrc/src/test/kotlin/io/spine/gradle/VersionGradleFileSpec.kt | Add tests for parsing version.gradle.kts. |
| buildSrc/src/test/kotlin/io/spine/gradle/VersionComparatorSpec.kt | Add tests for semantic-ish version comparison. |
| buildSrc/src/test/kotlin/io/spine/gradle/report/license/DependencyReportOutputTest.kt | Add tests for dependency report output locations. |
| buildSrc/src/test/kotlin/io/spine/gradle/publish/MavenMetadataSpec.kt | Add Jackson XML round-trip test for Maven metadata parsing. |
| buildSrc/src/main/kotlin/write-manifest.gradle.kts | Improve task metadata; add Spine task group usage. |
| buildSrc/src/main/kotlin/uber-jar-module.gradle.kts | Publishing/task setup tweaks; zip64 config update. |
| buildSrc/src/main/kotlin/Strings.kt | Minor wording tweak in KDoc. |
| buildSrc/src/main/kotlin/LicenseSettings.kt | License header formatting + minor wording tweak. |
| buildSrc/src/main/kotlin/kmp-module.gradle.kts | Copyright year update. |
| buildSrc/src/main/kotlin/jvm-module.gradle.kts | Copyright year update + task group/description. |
| buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts | Mark legacy JaCoCo plugin script as deprecated + warn. |
| buildSrc/src/main/kotlin/jacoco-kmm-jvm.gradle.kts | Mark legacy JaCoCo plugin script as deprecated + warn. |
| buildSrc/src/main/kotlin/io/spine/gradle/testing/Tasks.kt | Use SpineTaskGroup for test tasks. |
| buildSrc/src/main/kotlin/io/spine/gradle/SpineTaskGroup.kt | Introduce shared Gradle task group constant ("spine"). |
| buildSrc/src/main/kotlin/io/spine/gradle/RunGradle.kt | Minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ScopedDependency.kt | Refine scope ordering; add provided/system/undefined priority. |
| buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomGenerator.kt | Write generated POM under docs/dependencies. |
| buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt | Improve deduplication (semantic version compare + scope selection) and omit null <version>. |
| buildSrc/src/main/kotlin/io/spine/gradle/report/license/Paths.kt | Centralize dependency report output directory utilities. |
| buildSrc/src/main/kotlin/io/spine/gradle/report/license/ModuleDataExtensions.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/io/spine/gradle/report/license/LicenseReporter.kt | Move output under docs/dependencies; fix caching invalidation via projectVersion input; add Spine task group. |
| buildSrc/src/main/kotlin/io/spine/gradle/repo/Repository.kt | Minor KDoc wording tweaks + whitespace cleanup. |
| buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationHandler.kt | Add logging around artifactId adjustment; avoid overwriting unrelated artifactIds. |
| buildSrc/src/main/kotlin/io/spine/gradle/publish/MavenMetadata.kt | Add minimal Maven metadata XML model + fetch/parse helper. |
| buildSrc/src/main/kotlin/io/spine/gradle/publish/JarDsl.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/io/spine/gradle/publish/GitHubPackages.kt | Refine token KDoc text. |
| buildSrc/src/main/kotlin/io/spine/gradle/publish/CustomPublicationHandler.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Webpack.kt | Use SpineTaskGroup for JS task grouping. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Publish.kt | Use SpineTaskGroup for JS task grouping. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/LicenseReport.kt | Use SpineTaskGroup for JS task grouping. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/JsTasks.kt | Remove per-language group constants; update example to SpineTaskGroup. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/IntegrationTest.kt | Use SpineTaskGroup + minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Clean.kt | Use SpineTaskGroup for JS clean tasks. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Check.kt | Use SpineTaskGroup for JS check tasks. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Assemble.kt | Use SpineTaskGroup for JS assemble tasks + minor KDoc wording. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/JsExtension.kt | Minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/javascript/JsEnvironment.kt | Minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/javadoc/ExcludeInternalDoclet.kt | Add task group/description + minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/java/Tasks.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/io/spine/gradle/java/Linters.kt | Adjust Error Prone enablement property usage. |
| buildSrc/src/main/kotlin/io/spine/gradle/github/pages/UpdateGitHubPages.kt | Add Spine task group/description; clarify branch creation behavior. |
| buildSrc/src/main/kotlin/io/spine/gradle/github/pages/TaskName.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/io/spine/gradle/github/pages/SshKey.kt | Fix log message wording (config vs key file). |
| buildSrc/src/main/kotlin/io/spine/gradle/github/pages/RepositoryExtensions.kt | Seed new gh-pages branches with CNAME. |
| buildSrc/src/main/kotlin/io/spine/gradle/dart/task/Publish.kt | Use SpineTaskGroup for Dart publish tasks. |
| buildSrc/src/main/kotlin/io/spine/gradle/dart/task/IntegrationTest.kt | Use SpineTaskGroup + improve task description. |
| buildSrc/src/main/kotlin/io/spine/gradle/dart/task/DartTasks.kt | Remove per-language group constants; update example to SpineTaskGroup. |
| buildSrc/src/main/kotlin/io/spine/gradle/dart/task/Build.kt | Use SpineTaskGroup for Dart build tasks. |
| buildSrc/src/main/kotlin/io/spine/gradle/dart/DartExtension.kt | Minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/dart/DartEnvironment.kt | Minor KDoc wording tweaks. |
| buildSrc/src/main/kotlin/io/spine/gradle/ConfigTester.kt | Add Spine task group/description; rename coreJava → coreJvm. |
| buildSrc/src/main/kotlin/io/spine/gradle/Cli.kt | Fix process output draining by joining reader threads. |
| buildSrc/src/main/kotlin/io/spine/dependency/test/Truth.kt | Bump Truth version. |
| buildSrc/src/main/kotlin/io/spine/dependency/test/Testcontainers.kt | Add Testcontainers dependency coordinates. |
| buildSrc/src/main/kotlin/io/spine/dependency/test/Kover.kt | Bump Kover version. |
| buildSrc/src/main/kotlin/io/spine/dependency/test/KotlinCompileTesting.kt | Bump Kotlin compile-testing fork version. |
| buildSrc/src/main/kotlin/io/spine/dependency/test/JUnit.kt | Bump JUnit BOM + legacy JUnit 4 version. |
| buildSrc/src/main/kotlin/io/spine/dependency/test/Jacoco.kt | Bump JaCoCo version. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt | Update Validation version + rename gradle plugin coordinate pieces. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt | Bump ToolBase versions. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt | Bump Time version + add validation/gradle plugin coordinates. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt | Rename comment + bump ProtoTap version. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/McJava.kt | Remove McJava dependency object. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt | Bump Logging version reference. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt | Bump CoreJvmCompiler versions. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt | Bump CoreJvm version. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt | Bump fallback compiler versions. |
| buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt | Bump Base versions. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Slf4J.kt | Bump SLF4J version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Roaster.kt | Bump Roaster version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Protobuf.kt | Bump Protobuf + protobuf-gradle-plugin versions. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Plexus.kt | Bump Plexus utils version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/PerfMark.kt | Add PerfMark dependency coordinate. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/PalantirJavaFormat.kt | Bump Palantir Java format version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Okio.kt | Bump Okio version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Netty.kt | Bump Netty version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Log4j2.kt | Bump Log4j2 version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinSemver.kt | Bump kotlin-semver version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt | Bump KotlinPoet version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt | Bump Kotlin runtime/embedded + annotations version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/JetBrainsAnnotations.kt | Bump JetBrains annotations version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/JavaDiffUtils.kt | Bump java-diff-utils version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt | Bump Jackson BOM + annotations version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/J2ObjC.kt | Bump J2ObjC annotations version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/IntelliJ.kt | Update repo guidance in KDoc. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/HttpClient.kt | Bump google-http-client version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Guava.kt | Bump Guava version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Gson.kt | Bump Gson version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/GrpcKotlin.kt | Bump gRPC Kotlin version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Grpc.kt | Bump gRPC BOM version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/GoogleCloud.kt | Bump Google Cloud library coordinates. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/GoogleApis.kt | Bump google API libraries (api-common, common protos, gax, auth). |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Flogger.kt | Bump Flogger version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Firebase.kt | Bump Firebase Admin version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/CommonsLogging.kt | Bump commons-logging version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/CommonsCodec.kt | Bump commons-codec version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/CommonsCli.kt | Bump commons-cli version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Clikt.kt | Bump Clikt version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Caffeine.kt | Bump Caffeine version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Auto.kt | Bump AutoValue version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Asm.kt | Bump ASM version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/Aedile.kt | Bump Aedile version. |
| buildSrc/src/main/kotlin/io/spine/dependency/lib/OpenTelemetryKotlin.kt | Add OpenTelemetry Kotlin dependency coordinates (pinned 0.4.0). |
| buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/Serialization.kt | Copyright year update. |
| buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/DateTime.kt | Bump kotlinx-datetime version. |
| buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/Coroutines.kt | Copyright year update. |
| buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/AtomicFu.kt | Copyright year update. |
| buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt | Minor KDoc wording tweaks + whitespace cleanup. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/Pmd.kt | Bump PMD version. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/PluginPublishPlugin.kt | Bump Gradle plugin-publish plugin version. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/Ksp.kt | Bump KSP version. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/GradleDoctor.kt | Bump Gradle Doctor plugin version. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/ErrorProne.kt | Bump Error Prone Gradle plugin version. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/Dokka.kt | Remove unused import. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/CheckerFramework.kt | Bump Checker Framework version. |
| buildSrc/src/main/kotlin/io/spine/dependency/build/AnimalSniffer.kt | Bump Animal Sniffer version. |
| buildSrc/src/main/kotlin/io/spine/dependency/boms/BomsPlugin.kt | Minor KDoc wording tweak. |
| buildSrc/src/main/kotlin/DokkaExts.kt | Add Spine task group/description; minor KDoc wording. |
| buildSrc/src/main/kotlin/config-tester.gradle.kts | Switch to coreJvm repo constant; add task group/description. |
| buildSrc/src/main/kotlin/BuildExtensions.kt | Remove McJava shortcut; update KDoc wording. |
| buildSrc/quality/pmd.xml | Update rule ref and copyright year. |
| buildSrc/build.gradle.kts | Sync embedded Kotlin/Guava/ErrorProne/Protobuf/Kover/Kotest versions. |
| build.gradle.kts | Force Kotlin/Jackson/JUnit/Dokka/DateTime constraints across configs. |
| backends/otel-backend/build.gradle.kts | New KMP module wiring for OTel backend + tests. |
| backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/OtelBackendSettings.kt | New global injection point for OpenTelemetry instance. |
| backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/OtelEvents.kt | Add EVENT_NAME key + WithLogging.logEvent API. |
| backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/SeverityMapping.kt | Map Spine Level → OTel SeverityNumber. |
| backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/AttributeMapping.kt | Map log site + metadata + tags → OTel attributes. |
| backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/OtelLoggerBackend.kt | New backend implementation using Logger.emit(...). |
| backends/otel-backend/src/jvmMain/kotlin/io/spine/logging/backend/otel/OtelBackendFactory.kt | Service-loaded backend factory (AutoService/KSP). |
| backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/OtelLoggerBackendSpec.kt | Backend unit tests (mapping + span correlation + events). |
| backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/StubMetadata.kt | Test stub metadata container. |
| backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/StubLogSite.kt | Test stub log site. |
| backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/StubLogData.kt | Test stub log data. |
| backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/RecordingLogRecordProcessor.kt | Test log record processor capturing emitted logs. |
| backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/NoOpSpanProcessor.kt | No-op span processor for correlation tests. |
| backends/otel-backend/README.md | Usage + mapping + events documentation. |
| backends/otel-backend-bootstrap/build.gradle.kts | New JVM bootstrap module build config. |
| backends/otel-backend-bootstrap/src/main/kotlin/io/spine/logging/backend/otel/bootstrap/OtelLogging.kt | OTLP/HTTP SDK wiring + install/uninstall handle. |
| backends/otel-backend-bootstrap/src/test/kotlin/io/spine/logging/backend/otel/bootstrap/OtelLoggingSpec.kt | Bootstrap smoke tests (install/shutdown + env fallback). |
| .junie/guidelines.md | Update pointers to agent guideline TOC path. |
| .idea/misc.xml | IDE nullability annotations ordering/config updates. |
| .idea/live-templates/User.xml | Fix date format pattern to calendar year (yyyy). |
| .idea/live-templates/README.md | Fix typos/whitespace in template docs. |
| .idea/kotlinc.xml | Remove common compiler args section; formatting fix. |
| .idea/inspectionProfiles/Project_Default.xml | Adjust package naming regex + formatting. |
| .gitmodules | Add .agents/shared submodule. |
| .gitignore | Expand secret ignores + add shared config block markers. |
| .github/workflows/secret-scan.yml | Add gitleaks-based secret scanning workflow. |
| .github/workflows/revalidate-versions.yml | Add workflow to revalidate open PRs when base version changes. |
| .github/workflows/remove-obsolete-artifacts-from-packages.yaml | Workflow naming + action version refresh. |
| .github/workflows/publish.yml | Workflow naming + action version refresh + failure reporting step. |
| .github/workflows/gradle-wrapper-validation.yml | Workflow naming + action version refresh. |
| .github/workflows/ensure-reports-updated.yml | Improve report-check workflow scoping + naming + action version refresh. |
| .github/workflows/build-on-windows.yml | Refresh Windows CI workflow and Gradle setup usage. |
| .github/copilot-instructions.md | Update repo-wide Copilot instructions (context + review exclusions). |
| .codecov.yml | Update Codecov configuration (patch/project settings and paths). |
| .claude/settings.local.json | Restrict allowed tool permissions. |
| .claude/settings.json | Add Claude Code settings, hooks, and permission model. |
| .agents/version-policy.md | Remove legacy agent doc (superseded by shared agent guidance). |
| .agents/testing.md | Remove legacy agent doc (superseded by shared agent guidance). |
| .agents/skills/writer/SKILL.md | Remove legacy writer skill doc (superseded by shared agent guidance). |
| .agents/skills/writer/assets/templates/kotlin-java-example.md | Remove legacy writer templates. |
| .agents/skills/writer/assets/templates/kdoc-example.md | Remove legacy writer templates. |
| .agents/skills/writer/assets/templates/doc-page.md | Remove legacy writer templates. |
| .agents/skills/writer/agents/openai.yaml | Remove legacy writer agent config. |
| .agents/safety-rules.md | Remove legacy agent doc (superseded). |
| .agents/running-builds.md | Remove legacy agent doc (superseded). |
| .agents/refactoring-guidelines.md | Remove legacy agent doc (superseded). |
| .agents/quick-reference-card.md | Remove legacy agent doc (superseded). |
| .agents/project-structure-expectations.md | Remove legacy agent doc (superseded). |
| .agents/documentation-tasks.md | Remove legacy agent doc (superseded). |
| .agents/documentation-guidelines.md | Remove legacy agent doc (superseded). |
| .agents/common-tasks.md | Remove legacy agent doc (superseded). |
| .agents/coding-guidelines.md | Remove legacy agent doc (superseded). |
| .agents/advanced-safety-rules.md | Remove legacy agent doc (superseded). |
| .agents/_TOC.md | Remove legacy agent TOC (superseded by shared .agents/guidelines/_TOC.md). |
Files not reviewed (5)
- .idea/inspectionProfiles/Project_Default.xml: Generated file
- .idea/kotlinc.xml: Generated file
- .idea/live-templates/README.md: Generated file
- .idea/live-templates/User.xml: Generated file
- .idea/misc.xml: Generated file
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## update-config #141 +/- ##
================================================
Coverage 17.28% 17.28%
Complexity 141 141
================================================
Files 109 109
Lines 2545 2545
Branches 402 402
================================================
Hits 440 440
Misses 2066 2066
Partials 39 39 🚀 New features to boost your workflow:
|
Build on the Phase 0/1 backend with the log-based events surface, an OTLP bootstrap module, trace correlation, documentation, and review fixes. - Events: the `EVENT_NAME` metadata key and `WithLogging.logEvent(...)`. The backend forwards the name via `Logger.emit(eventName = …)` and omits it from the `spine.*` attributes. - `backends/otel-backend-bootstrap` (jvm-module): `OtelLogging.installOtlpHttp()` and `fromEnvironment()` build a native OTLP/HTTP SDK, install it through `OtelBackendSettings`, and return an `AutoCloseable` that uninstalls and shuts the SDK down. Adds the `exporters-core` and `exporters-otlp` coordinates. - Add a trace-correlation test (the record carries the active span's ids) and the module `README.md` (usage, mapping, events, and the consumer-side domain-event recipe). - Review fixes: restore the no-op holder after each test, safe-cast in `close()`, null-message guard in `handleError`, a widening KDoc note, README line length, and a resolved KDoc link. Tests: otel-backend 13, bootstrap 2. detekt and Dokka clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address findings from spine-code-review, kotlin-engineer, dependency-audit, and review-docs: - Revert an unintended `rootProject.name` rename (`logging` -> `spine-logging`) that a formatter slipped into the Phase 0 commit. - Add tests for `handleError`, `Tags` expansion (label-only / single / list), and boolean and double attribute values (otel-backend now has 16 tests). - `OpenTelemetryKotlin`: add the project URL comment. - Use `requireNotNull` instead of `!!` in the `StubLogData` test fixture. - README: fix an example comment; capitalize a `@return` description. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- `OtelLoggerBackend` no longer captures the OpenTelemetry logger at creation. It resolves from `OtelBackendSettings.current()` on every access (a `logger` property), so a backend created and cached per logging class before the SDK is installed picks it up once `use()` runs, and follows a later replacement (for example, the bootstrap restoring the no-op instance on shutdown). - Publishing: add `otel-backend-bootstrap` to the root `spinePublishing.modules`, and configure `otel-backend` (a KMP module) with `kmp-publish` + `customPublishing` so it publishes as `spine-logging-otel-backend`. Verified via `publishToMavenLocal`. - Update the backend tests for the lazy-resolution change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Raise patch coverage for the OpenTelemetry backend: exercise the single and repeated attribute value-type branches (numeric widening; boolean/double/string lists; non-primitive `toString` fallback), the unknown line-number / source-file log site, the factory `toString()`, and the bootstrap default-endpoint install. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the `spine.` prefix on metadata-derived attributes. Spine labels are dot-free identifiers and cannot collide with OpenTelemetry's dotted semantic conventions, so the prefix was convention, not collision-prevention — metadata keys now map to bare attributes named after their label. Keep a prefix for `Tags`, de-`spine`d to `tag.`: tag names and metadata labels share the same identifier namespace, so a same-named tag and metadata key would otherwise overwrite each other. The KDoc now states that actual rationale. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4e467c5 to
beb0846
Compare
|
The PR was accidentally merged during the branch split works. |
What
Adds an OpenTelemetry logger backend for Spine Logging, mapping Spine
LogDatatoio.opentelemetry.kotlinlog records — plus a log-based events surface and an optionalOTLP bootstrap module.
Modules
backends/otel-backend(kmp-module, JVM target; mapping incommonMain)OtelLoggerBackend:LogData→Logger.emit(...)— body without the[CONTEXT]suffix, level →
SeverityNumber+ severity text, epoch-nanos timestamp,LOG_CAUSE→ exception, log site →code.*, scope/log-site metadata →spine.*attributes (repeated keys → lists),
Tags→spine.tag.*, and active-spancorrelation via the implicit context.
OtelBackendSettingsinjects theOpenTelemetryinstance (no-op until set);OtelBackendFactoryis registered through@AutoService/ KSP.logEvent(...)/EVENT_NAMEemit log-based events (emit(eventName = …)).backends/otel-backend-bootstrap(jvm-module):OtelLogging.installOtlpHttp()/fromEnvironment()build a native OTLP/HTTP SDK, install it throughOtelBackendSettings, and return anAutoCloseablethat uninstalls and shuts the SDKdown.
Also adds the
OpenTelemetryKotlindependency object (pinned0.4.0) and registers thetwo modules.
Why
Routes Spine logs into an OpenTelemetry pipeline as structured, trace-correlated records,
and turns named log statements into OpenTelemetry events. Aligned with OTEP 4430 — events
go through the Logs API, never
Span.AddEvent.Verification
:otel-backend:jvmTest— 16/16;:otel-backend-bootstraptest — 2/2 (Kotest / JUnit 5)../gradlew buildgreen (whole project — compile + detekt + kover + license); module-levelDokka clean (no unresolved KDoc links).
kotlin-engineer(APPROVE),spine-code-review,dependency-audit, andreview-docs(APPROVE WITH CHANGES — all nits applied). Version gate satisfied(
2.0.0-SNAPSHOT.418>.417).Notes for reviewers
opentelemetry-kotlinlogs API is@ExperimentalApiat0.4.0; the backenddepends only on its
:apiartifact, with the SDK confined to the bootstrap module.upstream iOS/native OTLP export is not available. The mapping lives in
commonMaintoease that future lift.
recipe in the module
README, not coded here — it needsspine-server/ proto types.configsubmodule sync, the2.0.0-SNAPSHOT.418version bump, and dependency-report regeneration).dokkaGenerateaggregation hits aDokka 2.2.0
kotlin-stdlibversion conflict in Dokka's own generator classpath.Module-level
dokkaGeneratefor the two new modules passes cleanly;./gradlew builddoes not run Dokka.
Implementation plan:
.agents/tasks/otel-backend-implementation.md.🤖 Generated with Claude Code