class ReplaySafeLoggerProvider(LoggerProvider): (source)
Constructor: ReplaySafeLoggerProvider(logger_provider)
A logger provider that is safe for use during workflow replay.
Warning
This class is experimental and may change in future versions. Use with caution in production environments. It wraps the OpenTelemetry Python logs bridge API, which upstream still ships under the private opentelemetry._logs namespace (stabilization is tracked in opentelemetry-python#3361); if that surface moves when upstream stabilizes it, this class will follow it in a minor release.
This logger provider wraps an OpenTelemetry LoggerProvider and drops log records emitted (Logger.emit()) from workflow code while the workflow is replaying history events. Without this, libraries that emit OpenTelemetry log records from workflow code (e.g. google-adk's gen_ai.* events) re-emit every record on each replay, duplicating telemetry.
Emissions are therefore first-execution-only: a workflow task retry re-executes live and can emit again. Queries and update validators are live, at-most-once-per-request operations even when they execute while the workflow is replaying, so their emissions are kept. Emissions outside workflows are unaffected.
Install this as the process-global logger provider before any library (e.g. google-adk) obtains loggers:
opentelemetry._logs.set_logger_provider(
ReplaySafeLoggerProvider(my_logger_provider)
)
OpenTelemetry proxy loggers late-bind, so calling set_logger_provider after such libraries are imported still routes their loggers through this wrapper. However, set_logger_provider only takes effect once per process, so this wrapper must be the one and only global logger provider ever set.
| Method | __getattr__ |
Delegate all other attributes (e.g. shutdown, force_flush) to the underlying logger provider. |
| Method | __init__ |
Initialize the replay-safe logger provider. |
| Method | get |
Get a replay-safe logger from the underlying provider. |
| Instance Variable | _logger |
Undocumented |
Initialize the replay-safe logger provider.
| Parameters | |
loggerLoggerProvider | The underlying OpenTelemetry LoggerProvider to wrap. |
str, version: str | None = None, schema_url: str | None = None, attributes: _ExtendedAttributes | None = None) -> Logger:
(source)
¶
Get a replay-safe logger from the underlying provider.
| Parameters | |
name:str | The name of the instrumenting module. |
version:str | None | The version string of the instrumenting library. |
schemastr | None | The schema URL for the logger. |
attributes:_ExtendedAttributes | None | Instrumentation scope attributes for the logger. |
| Returns | |
Logger | A replay-safe logger instance. |