Skip to content

Add ability to disable or override tracer in pkg/op (private variable makes it impossible) #808

@valerijhegaj

Description

@valerijhegaj

Preflight Checklist

  • I could not find a solution in the existing issues, docs, nor discussions
  • I have joined the ZITADEL chat

Describe your problem

Problem

Hello, we want to use this library in a large financial institution. Tracing is enabled too aggressively inside github.com/zitadel/oidc/v3/pkg/op, but unlike the pkg/client package, the tracer there is a private variable.
Because of this, we cannot override or disable tracing without using unsafe hacks (go:linkname), which is not acceptable for production in regulated environments.
Example:

  • In github.com/zitadel/oidc/v3/pkg/client, the tracer is public and can be replaced.
  • In github.com/zitadel/oidc/v3/pkg/op, the tracer is private, so there is no official way to disable or customize it.

Why this is a problem

Many companies (banks, enterprise, government) have strict policies about:
Disabling unnecessary tracing
Controlling telemetry centrally
Avoiding unsafe code and fork maintenance
Right now, the only way to disable tracing inside pkg/op is to patch it manually or use unsafe.

Describe your ideal solution

Suggested solution

Any of the following would solve the issue cleanly:

Option 1 (preferred)

Make the tracer exported:

var Tracer = ...

Option 2

Expose a function:

func SetTracer(trace.Tracer)

Option 3

Expose a function to configure or disable tracing:

func DisableTracing() 
// or
func ConfigureTracing(provider trace.TracerProvider)

Why this change is useful

Keeps API backward-compatible
Removes the need for unsafe or custom forks
Makes behavior consistent with pkg/client
Allows regulated environments to integrate safely

Version

v3.45.0

Environment

Self-hosted

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status

    Gathering community feedback

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions