| Copyright | (c) Ian Duncan 2021-2026 |
|---|---|
| License | BSD-3 |
| Stability | experimental |
| Safe Haskell | None |
| Language | Haskell2010 |
OpenTelemetry.Trace.Monad
Description
Overview
Higher-level tracing interface that obtains the Tracer from your monad
stack via MonadTracer, eliminating the need to pass it explicitly.
Quick example
data App = App { appTracer :: Tracer }
instance MonadTracer (ReaderT App IO) where
getTracer = asks appTracer
handleRequest :: (MonadUnliftIO m, MonadTracer m) => Request -> m Response
handleRequest req = inSpan "handleRequest" defaultSpanArguments $ do
user <- inSpan "lookupUser" defaultSpanArguments $ lookupUser req
inSpan "buildResponse" defaultSpanArguments $ buildResponse user
Variants
inSpan: simple wrapper, no span access in callbackinSpan': passes theSpanto the callback for adding attributesinSpan'': raw variant, no automatic source-location capture
All variants automatically end the span and record exceptions, just like their counterparts in OpenTelemetry.Trace.Core.
When to use this vs Trace.Core
Use this module when your application has a monad stack with a Tracer
in the environment. Use OpenTelemetry.Trace.Core when you have the
Tracer as an explicit argument or need lower-level control.
Synopsis
- inSpan :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> m a -> m a
- inSpan' :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> (Span -> m a) -> m a
- inSpan'' :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> (Span -> m a) -> m a
- class Monad m => MonadTracer (m :: Type -> Type) where
Documentation
inSpan :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> m a -> m a Source #
Since: 0.0.1.0
inSpan' :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> (Span -> m a) -> m a Source #
Since: 0.0.1.0
inSpan'' :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> (Span -> m a) -> m a Source #
Since: 0.4.0.0
class Monad m => MonadTracer (m :: Type -> Type) where Source #
This is generally scoped by Monad stack to do different things
Since: 0.0.1.0
Instances
| MonadTracer m => MonadTracer (IdentityT m) Source # | |
| MonadTracer m => MonadTracer (ReaderT r m) Source # | |