{- |
Module : OpenTelemetry.Log.Core
Copyright : (c) Ian Duncan, 2026
License : BSD-3
Description : Public API for OpenTelemetry Logs
Stability : experimental
= Overview
This module provides the Logs Bridge API for connecting existing logging
systems (e.g. @monad-logger@, @katip@, @co-log@) to OpenTelemetry. It is
/not/ intended as a direct logging API for end users; instead, it gives
logging library authors the hooks to route log records through the
OpenTelemetry pipeline (processors, exporters, and correlation with traces).
= Quick example
@
import OpenTelemetry.Log.Core
main :: IO ()
main = do
-- Create a provider (typically done by the SDK during initialization)
lp <- createLoggerProvider processors emptyLoggerProviderOptions
let logger = makeLogger lp "my-app"
-- Emit a log record
emitLogRecord logger $ LogRecordArguments
{ severityNumber = Just SeverityNumberInfo
, severityText = Just "INFO"
, body = Just (toValue ("User logged in" :: Text))
, attributes = mempty
, timestamp = Nothing
, observedTimestamp = Nothing
, traceContext = Nothing
, instrumentationAttributes = Nothing
}
@
= Key concepts
[@LoggerProvider@] Factory for 'Logger's. Holds processors, resource info,
and attribute limits. Create with 'createLoggerProvider'.
[@Logger@] Obtained from a 'LoggerProvider', scoped to an instrumentation
library. Use 'makeLogger' or 'getLogger'.
[@LogRecord@] A single log entry with severity, body, attributes, and
optional correlation to a trace span. Emitted via 'emitLogRecord'.
= Severity filtering
You can set a minimum severity level to suppress low-priority logs:
@
setLoggerMinSeverity lp (Just SeverityNumberWarn)
-- Now only WARN and above are emitted
@
Both 'loggerIsEnabled' and 'emitLogRecord' respect this threshold.
Use 'Nothing' to disable filtering.
= Spec reference
<https://opentelemetry.io/docs/specs/otel/logs/bridge-api/>
-}
module OpenTelemetry.Log.Core (
-- * @LoggerProvider@ operations
LoggerProvider (..),
LoggerProviderOptions (..),
emptyLoggerProviderOptions,
createLoggerProvider,
setGlobalLoggerProvider,
getGlobalLoggerProvider,
shutdownLoggerProvider,
ShutdownResult (..),
forceFlushLoggerProvider,
-- * @Logger@ operations
InstrumentationLibrary (..),
instrumentationLibrary,
withSchemaUrl,
withLibraryAttributes,
Logger (..),
makeLogger,
getLogger,
loggerIsEnabled,
loggerIsEnabled',
setLoggerMinSeverity,
getLoggerMinSeverity,
-- * @LogRecord@ operations
ReadableLogRecord,
ReadWriteLogRecord,
IsReadableLogRecord (..),
IsReadWriteLogRecord (..),
LogRecordArguments (..),
AnyValue (..),
ToValue (..),
SeverityNumber (..),
toShortName,
emitLogRecord,
addAttribute,
addAttributes,
logRecordGetAttributes,
) where
import OpenTelemetry.Internal.Common.Types
import OpenTelemetry.Internal.Log.Core
import OpenTelemetry.Internal.Log.Types