Skip to content

Commit 080acff

Browse files
devurandomptaoussanis
authored andcommitted
[new] [#399] Add middleware to capture OpenTelemetry context (@devurandom)
This allows the correlation of logs and traces. Follows f3ce2b5
1 parent a193832 commit 080acff

File tree

1 file changed

+24
-9
lines changed
  • src/taoensso/timbre/appenders/community

1 file changed

+24
-9
lines changed

src/taoensso/timbre/appenders/community/otlp.clj

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@
6565
(doto (AutoConfiguredOpenTelemetrySdk/builder)
6666
(.setResultAsGlobal false)))
6767
68+
For trace correlation Timbre config should include
69+
:middleware [... otlp/middleware ...].
70+
6871
[1] Ref. <https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md#version-200-2024-01-12>"
6972
[{:keys [^LoggerProvider logger-provider]}]
7073
{:enabled? true
@@ -74,7 +77,7 @@
7477
:output-fn :inherit
7578
:fn
7679
(fn [{:keys [^java.util.Date instant level ^String ?ns-str
77-
?file ?line ?err vargs msg_ context]}]
80+
?file ?line ?err vargs msg_ context] :as data}]
7881

7982
(let [logger (.get logger-provider ?ns-str)
8083
timestamp (.toInstant instant)
@@ -89,14 +92,26 @@
8992
:ex-data ?ex-data)
9093

9194
event (merge (dissoc arg :msg) extra)
92-
attributes (attr/->attributes event)]
95+
attributes (attr/->attributes event)
96+
lrb (.logRecordBuilder logger)]
97+
98+
;; Ref. https://javadoc.io/doc/io.opentelemetry/opentelemetry-api-logs/latest/io/opentelemetry/api/logs/LogRecordBuilder.html
99+
100+
(when-let [otel-context (get data :otel/context)]
101+
(.setContext lrb otel-context))
93102

94103
;; TODO Use clj-otel once it supports the logs API,
95104
;; Ref. <https://github.com/steffan-westcott/clj-otel/issues/8>
96-
(.emit
97-
(doto (.logRecordBuilder logger)
98-
(.setAllAttributes attributes)
99-
(.setTimestamp timestamp)
100-
(.setBody message)
101-
(.setSeverity severity)
102-
(.setSeverityText (.toString severity))))))})
105+
(doto lrb
106+
(.setAllAttributes attributes)
107+
(.setTimestamp timestamp)
108+
(.setBody message)
109+
(.setSeverity severity)
110+
(.setSeverityText (.toString severity))
111+
(.emit))))})
112+
113+
(defn middleware
114+
"Adds `:otel/context` to log data."
115+
[data]
116+
(assoc data :otel/context
117+
(io.opentelemetry.context.Context/current)))

0 commit comments

Comments
 (0)