When this feature is enabled (see `otel-tracing?`), Telemere's tracing
signal creators (`trace!`, `spy!`, etc.) will now manipulate OpenTelemetry's
span context when relevant.
Before this commit:
Telemere would detect and use OpenTelemetry span context, but
the inverse wasn't true: OpenTelemetry instrumentation wouldn't
recognize Telemere spans.
After this commit:
Telemere detects OpenTelemetry span context, and the inverse is
also true: OpenTelemetry instrumentation will recognize Telemere
spans.
The net effect:
When you use Telemere to trace forms that may themselves do
auto/manual OpenTelemetry instrumentation - the resulting spans
will now properly identify Telemere's spans as parents.
Note that this is interop is implemented in a unique way that retains
Telemere's usual benefits re: low costs at signal callsite, and ability
to skip costs when filtering / sampling / rate-limiting / etc.
On reflection the choice to drop ":" (and so type info) from ALL attribute
keywords seems excessive. We can instead restrict the change only to
the :level value.
Feedback welcome.
1. Added `*uid-fn*` to globally control uid style
2. Now distinguish between root and child uids
Root uids generally need to be longer.
3. Added to utils: `nano-uid-fn` and `hex-uid-fn`
These use new highly optimized implementations
when on JVM Clojure, and are highly flexible.
Tracing signals now include:
:parent {:keys [id uid instant]}
:root {:keys [id uid instant]}
The :instant info is undocumented, and useful for advanced cases like
the upcoming Span support for the OpenTelemetry handler.
Incl.:
1. Logger names are now used as namespaces.
- For SLF4J: these are typically class names.
- For tools.logging: these are typically *ns* strings.
2. These now have dedicated :kind (:slf4j, :tools.logging) to make it
easier for users to set kind-specific min levels.