Skip to content

Commit 1e51b41

Browse files
committed
Support passing OpenTelemetry context to Timbre OTLP appender
Capture the OpenTelemetry context in a Timbre middleware and pick it up in the Timbre OTLP appender. This allows to correlate logs with traces. Fixes: f3ce2b5
1 parent 23036bc commit 1e51b41

File tree

1 file changed

+17
-4
lines changed
  • src/taoensso/timbre/appenders/community

1 file changed

+17
-4
lines changed

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44
{:author "Dennis Schridde (@devurandom)"}
55
(:require
66
[taoensso.encore :as enc]
7-
[steffan-westcott.clj-otel.api.attributes :as attr])
7+
[steffan-westcott.clj-otel.api.attributes :as attr]
8+
[steffan-westcott.clj-otel.context :as context])
89

9-
(:import [io.opentelemetry.api.logs LoggerProvider Severity]))
10+
(:import
11+
(io.opentelemetry.api.logs LoggerProvider Severity)
12+
(io.opentelemetry.context Context)
13+
(java.util Date)))
1014

1115
(comment (set! *warn-on-reflection* true))
1216

@@ -65,6 +69,9 @@
6569
(doto (AutoConfiguredOpenTelemetrySdk/builder)
6670
(.setResultAsGlobal false)))
6771
72+
For correlation with traces also configure Timbre to use the middleware-
73+
:middleware [otlp/middleware]
74+
6875
[1] Ref. <https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md#version-200-2024-01-12>"
6976
[{:keys [^LoggerProvider logger-provider]}]
7077
{:enabled? true
@@ -73,8 +80,9 @@
7380
:rate-limit nil
7481
:output-fn :inherit
7582
:fn
76-
(fn [{:keys [^java.util.Date instant level ^String ?ns-str
77-
?file ?line ?err vargs msg_ context]}]
83+
(fn [{:keys [^Date instant level ^String ?ns-str
84+
?file ?line ?err vargs msg_ context]
85+
::keys [^Context otel-context]}]
7886

7987
(let [logger (.get logger-provider ?ns-str)
8088
timestamp (.toInstant instant)
@@ -95,8 +103,13 @@
95103
;; Ref. <https://github.com/steffan-westcott/clj-otel/issues/8>
96104
(.emit
97105
(doto (.logRecordBuilder logger)
106+
(.setContext otel-context)
98107
(.setAllAttributes attributes)
99108
(.setTimestamp timestamp)
100109
(.setBody message)
101110
(.setSeverity severity)
102111
(.setSeverityText (.toString severity))))))})
112+
113+
(defn middleware
114+
[data]
115+
(assoc data ::otel-context (context/current)))

0 commit comments

Comments
 (0)