Skip to content

enhancement: add structured operational logging - #1128

Merged
rapids-bot[bot] merged 4 commits into
NVIDIA:mainfrom
willkill07:wkillian/relay-921-structured-operational-logging
Sep 19, 2026
Merged

rapids-bot[bot] merged 4 commits into
NVIDIA:mainfrom
willkill07:wkillian/relay-921-structured-operational-logging

Conversation

@willkill07

@willkill07 willkill07 commented Sep 18, 2026

Copy link
Copy Markdown
Member

Overview

Add Relay-owned structured operational logging across language bindings and dynamic plugin APIs.

  • I confirm this contribution is my own work, or I have the right to submit it under this project's license.
  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Details

  • Add typed structured logging APIs for Python, Node.js, Go, and the C FFI.
  • Add native-plugin ABI v6 logging plus Rust native helper macros.
  • Add grpc-v1 Log RPC support, Rust/Python worker runtime helpers, and Rust worker macros.
  • Preserve JSON-typed fields in Relay sink output and namespace emitter targets.
  • Document all levels and supported binding/plugin APIs.
  • Add end-to-end tests for language bindings, FFI, native plugins, and gRPC workers.

Where should the reviewer start?

Start with crates/core/src/logging/mod.rs for the shared emitter, then crates/plugin/src/lib.rs and crates/worker/src/lib.rs for native and gRPC plugin contracts. docs/reference/operational-logging.mdx summarizes the public API.

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

  • Closes RELAY-921

Summary by CodeRabbit

  • New Features

    • Added structured operational logging for Go, Python, Node.js, native plugins, and worker plugins.
    • Supports trace, debug, info, warn, and error levels, custom targets, and nested JSON fields.
    • Added convenience logging methods and macros across supported SDKs.
    • Added native ABI v6 and worker logging support with backward-compatible negotiation.
  • Bug Fixes

    • Structured numeric and boolean fields now retain their original JSON types instead of becoming strings.
  • Documentation

    • Added usage guidance for binding, plugin, ABI, and worker logging APIs.

Signed-off-by: Will Killian <wkillian@nvidia.com>
@willkill07
willkill07 requested review from a team as code owners September 18, 2026 23:39
@github-actions github-actions Bot added size:XL PR is extra large Improvement improvement to existing functionality lang:go PR changes/introduces Go code lang:js PR changes/introduces Javascript/Typescript code lang:python PR changes/introduces Python code lang:rust PR changes/introduces Rust code labels Sep 18, 2026
@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Repository: NVIDIA/NeMo-Relay/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: baa9db2e-48d4-4a63-98b6-462d7d06d27b

📥 Commits

Reviewing files that changed from the base of the PR and between 7730fc0 and 5e6d7c7.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • examples/language-binding-plugin/rust/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (30)
  • ATTRIBUTIONS-Rust.md
  • crates/cli/tests/cli_tests.rs
  • crates/core/Cargo.toml
  • crates/core/src/logging/format.rs
  • crates/core/src/logging/mod.rs
  • crates/core/src/plugin/dynamic/native.rs
  • crates/core/src/plugin/dynamic/worker.rs
  • crates/core/tests/coverage/logging_tests.rs
  • crates/core/tests/unit/native_plugin_tests.rs
  • crates/ffi/nemo_relay.h
  • crates/ffi/src/api/mod.rs
  • crates/ffi/tests/unit/api/core_tests.rs
  • crates/node/src/api/mod.rs
  • crates/node/tests/logging_tests.mjs
  • crates/plugin/src/lib.rs
  • crates/plugin/tests/typed_callbacks.rs
  • crates/python/src/py_api/mod.rs
  • crates/worker-proto/proto/nemo/relay/worker/v1/plugin_worker.proto
  • crates/worker/src/lib.rs
  • crates/worker/tests/worker_sdk_tests.rs
  • docs/build-plugins/native/native-abi-reference.mdx
  • docs/build-plugins/workers/grpc-v1-protocol.mdx
  • docs/reference/operational-logging.mdx
  • go/nemo_relay/logging_test.go
  • go/nemo_relay/nemo_relay.go
  • python/nemo_relay/__init__.py
  • python/nemo_relay/_native.pyi
  • python/plugin/src/nemo_relay_plugin/_api.py
  • python/tests/plugin/test_worker_sdk.py
  • python/tests/test_logging.py
 _______________________________________
< Goodbye, code review procrastination. >
 ---------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

License Diff

Compared against origin/main.

Lockfile license changes

Lockfile License Changes

Rust

Added

  • None

Removed

  • None

Updated/Changed

erased-serde

Before:

  • erased-serde 0.4.10 (MIT OR Apache-2.0)

After:

  • erased-serde 0.4.10 (Apache-2.0)

serde_buf

Before:

  • serde_buf 0.1.2 (Apache-2.0 OR MIT)

After:

  • serde_buf 0.1.2 (Apache-2.0)

serde_fmt

Before:

  • serde_fmt 1.1.0 (Apache-2.0 OR MIT)

After:

  • serde_fmt 1.1.0 (Apache-2.0)

typeid

Before:

  • typeid 1.0.3 (MIT OR Apache-2.0)

After:

  • typeid 1.0.3 (Apache-2.0)

value-bag-serde1

Before:

  • value-bag-serde1 1.13.0 (Apache-2.0 OR MIT)

After:

  • value-bag-serde1 1.13.0 (Apache-2.0)

Node

Added

  • None

Removed

  • None

Updated/Changed

  • None

Python

Added

  • None

Removed

  • None

Updated/Changed

anyio

Before:

  • anyio 4.15.1 (MIT)

After:

  • anyio 4.13.0 (MIT)

typing-extensions

Before:

  • typing-extensions 4.16.0 (PSF-2.0)

After:

  • typing-extensions 4.15.0 (PSF-2.0)
Status output
[license-diff] selected languages: rust, node, python
[license-diff] generating current inventory
[license-diff] current: generating Rust inventory
[license-diff] current: Rust inventory complete (461 packages)
[license-diff] current: generating Node inventory
[license-diff] current: Node inventory complete (424 packages)
[license-diff] current: generating Python inventory
[license-diff] current: Python inventory complete (115 packages)
[license-diff] current inventory complete
[license-diff] checking out base ref origin/main into a temporary worktree
[license-diff] base: generating Rust inventory
[license-diff] base: Rust inventory complete (461 packages)
[license-diff] base: generating Node inventory
[license-diff] base: Node inventory complete (424 packages)
[license-diff] base: generating Python inventory
[license-diff] base: Python inventory complete (115 packages)
[license-diff] base inventory complete
[license-diff] removing temporary base worktree
[license-diff] comparing inventories
[license-diff] rendering Markdown output
[license-diff] done

@willkill07 willkill07 added this to the 0.10 milestone Sep 18, 2026
@willkill07 willkill07 self-assigned this Sep 18, 2026
@github-actions

Copy link
Copy Markdown

Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Comment thread crates/core/src/logging/format.rs

@mnajafian-nv mnajafian-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Salonijain27 Salonijain27 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved from a dependency point of view

@willkill07

Copy link
Copy Markdown
Member Author

/merge

@rapids-bot
rapids-bot Bot merged commit 0be6ecf into NVIDIA:main Sep 19, 2026
96 of 98 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Improvement improvement to existing functionality lang:go PR changes/introduces Go code lang:js PR changes/introduces Javascript/Typescript code lang:python PR changes/introduces Python code lang:rust PR changes/introduces Rust code size:XL PR is extra large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants