Liking cljdoc? Tell your friends :D

observability

Cross-cutting observability for services and persistence layers: structured logging, metrics, tracing breadcrumbs, and pluggable error reporting adapters.

Key namespaces

NamespacePurpose

boundary.observability.logging.ports

Logging protocol used by shell/service layers for structured events

boundary.observability.metrics.ports

Metrics protocol for counters, gauges, and timing instrumentation

boundary.observability..shell.adapters.

Pluggable providers: no-op (default), Datadog, Sentry

Usage pattern

Use observability ports from services/adapters:

(require '[boundary.observability.logging.ports :as log-ports]
         '[boundary.observability.metrics.ports :as metrics-ports])

;; Service layer — automatic logging, metrics, error reporting
(defn create-user [this user-data]
  (log-ports/info logger
                  {:event :create-user
                   :email (:email user-data)})
  (metrics-ports/increment-counter! metrics :users.created 1)
  (let [user (user-core/prepare-user user-data)]
    (.create-user repository user)))

;; Persistence layer — automatic query telemetry
(defn find-user-by-email [ctx email]
  (let [start (System/nanoTime)
        result (jdbc/execute-one! ctx query)]
    (metrics-ports/record-timing! metrics :users.find-by-email.ns (- (System/nanoTime) start))
    result))

Benefits

  • Consistent error handling and logging across all modules

  • Automatic metrics collection per operation

  • Automatic breadcrumbs for error tracking

  • ~50% code reduction compared to manual instrumentation

Adapters

AdapterWhen to use

no-op (default)

Development and tests

datadog

Production metrics and APM

sentry

Production error tracking

Testing

clojure -M:test:db/h2 :observability

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close