CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# Release Notes
## [v5.5.0] (2026-11-06)
* Drop all incoming context when distributed tracing is disabled by @dmontagu in [#2679](https://github.com/pydantic/logfire/pull/2679)
* Carry variable overrides and targeting context into thread pools by @dmontagu in [#2680](https://github.com/pydantic/logfire/pull/2680)
* Name the setting when LOGFIRE_TRACE_SAMPLE_RATE is not a number by @chrikrah in [#2685](https://github.com/pydantic/logfire/pull/2685)
* Record audio responses and legacy function calls from OpenAI chat completions by @pcbeingused333 in [#2636](https://github.com/pydantic/logfire/pull/2636)
* Avoid duplicate console output from Loguru by @imp-joshi in [#2690](https://github.com/pydantic/logfire/pull/2690)
* Save a read token on Windows, where os.fchmod does not exist by @PRINCE2-AI in [#2696](https://github.com/pydantic/logfire/pull/2696)
* Record the explanation of an Anthropic refusal as output text by @pcbeingused333 in [#2638](https://github.com/pydantic/logfire/pull/2638)
* Record custom tool calls from the OpenAI Responses API by @michaelkillgta in [#2694](https://github.com/pydantic/logfire/pull/2694)
* Scrub AWS security tokens (x-amz-security-token, aws_security_token) by default by @hsusul in [#2692](https://github.com/pydantic/logfire/pull/2692)
* Let a span status set by the exception callback stand by @pedro-teixeira in [#2707](https://github.com/pydantic/logfire/pull/2707)
* Record legacy function calls in OpenAI chat completion input messages by @chrikrah in [#2711](https://github.com/pydantic/logfire/pull/2711)
* Return `Logfire` instance from `logfire-api` `configure()` when SDK is not installed by @PatrickRibbsaeter in [#2716](https://github.com/pydantic/logfire/pull/2716)
* fix(datasets): serialize dictionary-valued case fields by @shuaiyafei in [#2713](https://github.com/pydantic/logfire/pull/2713)
* Convert Anthropic SDK content blocks sent back as input messages by @jaeminbird in [#2718](https://github.com/pydantic/logfire/pull/2718)
* Keep streamed LLM responses iterable when recording them fails by @jaeminbird in [#2721](https://github.com/pydantic/logfire/pull/2721)
* Skip empty items in comma-separated Pydantic plugin include/exclude settings by @Fahmid-Arman in [#2720](https://github.com/pydantic/logfire/pull/2720)
* Fall back to OpenTelemetry instrumentors in logfire run by @mekanbaymyradov in [#2609](https://github.com/pydantic/logfire/pull/2609)
* **Breaking Change:** Require project credentials before SDK configuration by @strawgate in [#2683](https://github.com/pydantic/logfire/pull/2683)
* Connect agent sandboxes over gRPC with pydantic-monty 1.5.0 by @dmontagu in [#2737](https://github.com/pydantic/logfire/pull/2737)
* Make SpanLevel compare equal to 'warning' by @Fahmid-Arman in [#2732](https://github.com/pydantic/logfire/pull/2732)
* Don't crash the console exporter on attributes that format to an empty string by @Fahmid-Arman in [#2731](https://github.com/pydantic/logfire/pull/2731)
* Add configure(fleet=...) to manage the SDK from Logfire Fleet by @strawgate in [#2736](https://github.com/pydantic/logfire/pull/2736)
* Add actionable Agent Sandboxes error hints by @dmontagu in [#2739](https://github.com/pydantic/logfire/pull/2739)
* Send telemetry with the API key when no write token is configured by @dmontagu in [#2743](https://github.com/pydantic/logfire/pull/2743)
## New Contributors
* @pierrebrunelle made their first contribution in [#2644](https://github.com/pydantic/logfire/pull/2644)
* @PRINCE2-AI made their first contribution in [#2696](https://github.com/pydantic/logfire/pull/2696)
* @michaelkillgta made their first contribution in [#2694](https://github.com/pydantic/logfire/pull/2694)
* @hsusul made their first contribution in [#2692](https://github.com/pydantic/logfire/pull/2692)
* @pedro-teixeira made their first contribution in [#2707](https://github.com/pydantic/logfire/pull/2707)
* @PatrickRibbsaeter made their first contribution in [#2716](https://github.com/pydantic/logfire/pull/2716)
* @shuaiyafei made their first contribution in [#2713](https://github.com/pydantic/logfire/pull/2713)
* @jaeminbird made their first contribution in [#2718](https://github.com/pydantic/logfire/pull/2718)
* @Fahmid-Arman made their first contribution in [#2720](https://github.com/pydantic/logfire/pull/2720)
* @mekanbaymyradov made their first contribution in [#2609](https://github.com/pydantic/logfire/pull/2609)
## [v5.4.0] (2026-10-26)
* `logfire.agent_sandboxes()` by @samuelcolvin in [#2658](https://github.com/pydantic/logfire/pull/2658) and [#2672](https://github.com/pydantic/logfire/pull/2672)
* fix(sdk): serialize all pathlib.Path variants as plain strings by @RichardoMrMu in [#2669](https://github.com/pydantic/logfire/pull/2669)
* Format an empty set as set() in the console exporter by @chrikrah in [#2671](https://github.com/pydantic/logfire/pull/2671)
* Keep binary attributes out of the secret scrubber by @Eapp1e in [#2668](https://github.com/pydantic/logfire/pull/2668)
* Keep recording exceptions whose `__str__` raises by @Eapp1e in [#2667](https://github.com/pydantic/logfire/pull/2667)
* Print generator attributes as their repr in the console exporter by @CyberNativeAI in [#2657](https://github.com/pydantic/logfire/pull/2657)
* Record OpenAI cache write tokens on spans by @pcbeingused333 in [#2637](https://github.com/pydantic/logfire/pull/2637)
* Keep non-string messages from breaking exporters by @oxura in [#2655](https://github.com/pydantic/logfire/pull/2655)
* Count only top-level CTE names in SQL summaries by @gokay-ai in [#2652](https://github.com/pydantic/logfire/pull/2652)
* Log dataclass types as their repr, not their default field values by @chrikrah in [#2649](https://github.com/pydantic/logfire/pull/2649)
* Record max_completion_tokens as the requested max tokens on OpenAI chat spans by @pcbeingused333 in [#2646](https://github.com/pydantic/logfire/pull/2646)
* Record custom tool calls from OpenAI chat completions by @pcbeingused333 in [#2647](https://github.com/pydantic/logfire/pull/2647)
* Convert Anthropic document and file-backed image input blocks to semconv parts by @pcbeingused333 in [#2645](https://github.com/pydantic/logfire/pull/2645)
* Harden remote strings in log messages by @dmontagu in [#2654](https://github.com/pydantic/logfire/pull/2654)
* Remove the duplicated tool call from message content by @RachelWanggg in [#2442](https://github.com/pydantic/logfire/pull/2442)
* Record errors raised during LLM stream consumption by @deepanshupal in [#2491](https://github.com/pydantic/logfire/pull/2491)
* fix(formatter): treat unbalanced braces as a formatting failure by @Eapp1e in [#2675](https://github.com/pydantic/logfire/pull/2675)
## [v5.3.0] (2026-10-23)
* Automatically instrument FastAPI with logfire run by @alexmojaki in [#2606](https://github.com/pydantic/logfire/pull/2606)
* Automatically instrument Starlette apps with logfire run by @alexmojaki in [#2596](https://github.com/pydantic/logfire/pull/2596)
* Automatically instrument Flask apps with logfire run by @alexmojaki in [#2594](https://github.com/pydantic/logfire/pull/2594)
* Raise when SQLAlchemy instrumentation is skipped by @maaz-bin-hassan in [#2602](https://github.com/pydantic/logfire/pull/2602)
* Add `pending_spans` option by @adriangb in [#2580](https://github.com/pydantic/logfire/pull/2580)
* Honor exception callback levels when setting span status by @alexmojaki in [#2592](https://github.com/pydantic/logfire/pull/2592)
* Scrub passphrase, signing_key and hmac_key by default by @sridhar-3009 in [#2593](https://github.com/pydantic/logfire/pull/2593)
* Scrub OAuth-style token names (access_token, refresh_token, id_token, bearer_token) by default by @sridhar-3009 in [#2551](https://github.com/pydantic/logfire/pull/2551)
* Treat `logfire.tags` passed through structlog as log tags by @Thanatos9404 in [#2598](https://github.com/pydantic/logfire/pull/2598)
* Treat `logfire.tags` passed through logging and loguru as log tags by @Thanatos9404 in [#2550](https://github.com/pydantic/logfire/pull/2550)
* Suppress native FastAPI telemetry by @alexmojaki in [#2629](https://github.com/pydantic/logfire/pull/2629)
* Require certifi 2026.10.19 to distrust compromised eMudhra chains by @alexmojaki in [#2640](https://github.com/pydantic/logfire/pull/2640)
* Format range attributes in the console exporter by @fhgffy in [#2534](https://github.com/pydantic/logfire/pull/2534)
* Format bytearray attributes in the console exporter by @sebxt in [#2591](https://github.com/pydantic/logfire/pull/2591)
* Fix DataFrame labels below pandas display limits by @fallintoplace in [#2509](https://github.com/pydantic/logfire/pull/2509)
* Handle zero-dimensional NumPy arrays in console formatting by @dailyun in [#2621](https://github.com/pydantic/logfire/pull/2621)
* Clarify CLI account switching and logout scope by @alexmojaki in [#2552](https://github.com/pydantic/logfire/pull/2552)
* Include the dataset in `url_from_eval` links when the report has one by @jirikuncar in [#2566](https://github.com/pydantic/logfire/pull/2566)
* Keep the parent context for spans started while instrumentation is suppressed by @adtyavrdhn in [#2570](https://github.com/pydantic/logfire/pull/2570)
* Record response id and finish reasons for streamed OpenAI and Anthropic calls by @flcrom in [#2545](https://github.com/pydantic/logfire/pull/2545)
* Record the response model for streamed OpenAI and Anthropic calls by @darshjoshi in [#2558](https://github.com/pydantic/logfire/pull/2558)
* Record OpenAI refusals in gen_ai.output.messages by @pcbeingused333 in [#2582](https://github.com/pydantic/logfire/pull/2582)
* Record streamed OpenAI Responses that end as incomplete or failed by @SergeevDmitry in [#2565](https://github.com/pydantic/logfire/pull/2565)
* Record response id and finish reason on Claude Agent SDK chat spans by @pcbeingused333 in [#2620](https://github.com/pydantic/logfire/pull/2620)
* Record cache token usage on Anthropic spans by @pcbeingused333 in [#2616](https://github.com/pydantic/logfire/pull/2616)
* Record cached prompt tokens on OpenAI spans by @pcbeingused333 in [#2617](https://github.com/pydantic/logfire/pull/2617)
* Record why a Claude Agent SDK run ended in error by @pcbeingused333 in [#2622](https://github.com/pydantic/logfire/pull/2622)
* Record finish reasons for OpenAI Responses API calls by @pcbeingused333 in [#2619](https://github.com/pydantic/logfire/pull/2619)
* Record response id and finish reasons on OpenAI Agents Responses spans by @pcbeingused333 in [#2632](https://github.com/pydantic/logfire/pull/2632)
* Record Responses API refusals as text in gen_ai.output.messages by @pcbeingused333 in [#2618](https://github.com/pydantic/logfire/pull/2618)
* Return the provider response when recording it fails by @devjoinedthechat in [#2559](https://github.com/pydantic/logfire/pull/2559)
* Preserve all Anthropic tool result content parts by @alexmojaki in [#2634](https://github.com/pydantic/logfire/pull/2634)
* Don't let Litestar routing errors escape span naming by @devjoinedthechat in [#2560](https://github.com/pydantic/logfire/pull/2560)
* Read stable database semconv attributes when building DB span messages by @devjoinedthechat in [#2561](https://github.com/pydantic/logfire/pull/2561)
* Don't send empty schemas when pushing a dataset typed with `Any` by @digit50 in [#2578](https://github.com/pydantic/logfire/pull/2578)
* Exclude the working directory from `sys.path` while `logfire run` instruments packages by @Kludex in [#2623](https://github.com/pydantic/logfire/pull/2623)
* Keep CLI tracing from replacing the global provider by @widechaos in [#2611](https://github.com/pydantic/logfire/pull/2611)
* Isolate CLI diagnostic logging from application logging by @alexmojaki in [#2625](https://github.com/pydantic/logfire/pull/2625)
## [v6.0.0b8] (2026-10-09)
* Support OpenTelemetry 1.45 by @alexmojaki in [#2536](https://github.com/pydantic/logfire/pull/2536)
* Allow console attributes without verbose output by @rudrakshkarpe in [#2488](https://github.com/pydantic/logfire/pull/2488)
* Add `compression` option and zstd experimental support by @Viicos in [#2535](https://github.com/pydantic/logfire/pull/2535)
* Update FastAPI instrumentation to prevent duplicate telemetry by @alexmojaki in [#2524](https://github.com/pydantic/logfire/pull/2524)
* Update Anthropic instrumentation by @alexmojaki in [#2521](https://github.com/pydantic/logfire/pull/2521)
* Keep span message in sync with the name after `update_name` by @darshjoshi in [#2514](https://github.com/pydantic/logfire/pull/2514)
* Expose RFC 9457 problem details on query client errors by @adriangb in [#2511](https://github.com/pydantic/logfire/pull/2511)
* Read stable HTTP semconv attributes when building HTTP span messages by @samuelcolvin in [#2516](https://github.com/pydantic/logfire/pull/2516)
* Update Google GenAI instrumentation by @alexmojaki in [#2523](https://github.com/pydantic/logfire/pull/2523)
* Convert span attribute ints below the int64 minimum to strings by @JoeyTan21 in [#2502](https://github.com/pydantic/logfire/pull/2502)
* Respect repr=False when logging attrs fields by @harbinresearcher in [#2518](https://github.com/pydantic/logfire/pull/2518)
* Default the CLI base URL to LOGFIRE_BASE_URL by @jgjoe in [#2260](https://github.com/pydantic/logfire/pull/2260)
* Create subprocess with no console windows on windows by @marcelotrevisani in [#2507](https://github.com/pydantic/logfire/pull/2507)
* Fix when logfire tries to access a file that has no permission by @marcelotrevisani in [#2464](https://github.com/pydantic/logfire/pull/2464)
* fix: do not treat non-retryable DiskRetryer responses as success by @alexmojaki in [#2529](https://github.com/pydantic/logfire/pull/2529)
* fix explicit context for logfire metrics by @alexmojaki in [#2532](https://github.com/pydantic/logfire/pull/2532)
* Fix OTLP byte POST retries through Session.request by @SAY-5 in [#2503](https://github.com/pydantic/logfire/pull/2503)
* Handle project setup for accounts without organizations by @strawgate in [#2469](https://github.com/pydantic/logfire/pull/2469)
## [v6.0.0b7] (2026-09-25)
* Configure proxy managers before other threads can use them by @adriangb in [#2479](https://github.com/pydantic/logfire/pull/2479)
## [v6.0.0b6] (2026-09-25)
* Make the `logfire` package own the `logfire` command and require `logfire-cli` 0.1.8 or later by @adriangb in [#2480](https://github.com/pydantic/logfire/pull/2480)
## [v6.0.0b5] (2026-09-24)
* Enable TCP keepalive and recycle idle connections in Logfire's HTTP sessions by @adriangb in [#2309](https://github.com/pydantic/logfire/pull/2309)
## [v6.0.0b4] (2026-09-21)
* Make `instrument_mcp()` work with mcp 2 / fastmcp 4 by @samuelcolvin in [#2439](https://github.com/pydantic/logfire/pull/2439)
* Add `logfire.instrument_monty()` by @davidhewitt in [#2371](https://github.com/pydantic/logfire/pull/2371)
* Require `logfire-cli` 0.1.7 or later in the `logfire` compatibility package.
## [v6.0.0b3] (2026-09-18)
* Require `logfire-cli` 0.1.5 or later in the `logfire` compatibility package.
## [v6.0.0b2] (2026-09-17)
* Require `logfire-cli` 0.1.4 or later in the `logfire` compatibility package.
* Support console scripts in `logfire run` by @strawgate in [#2427](https://github.com/pydantic/logfire/pull/2427)
## [v6.0.0b1] (2026-09-15)
* **Breaking Change:** Split the `logfire` distribution into the `logfire-sdk` Python SDK and the standalone `logfire-cli`. The `logfire` package now installs both while preserving upgrades from Logfire 5, the existing `import logfire` API, and optional extras. Install `logfire-sdk` directly when the CLI is not needed.
## [v5.2.0] (2026-10-13)
* Support OpenTelemetry 1.45 by @alexmojaki in [#2536](https://github.com/pydantic/logfire/pull/2536)
* Allow console attributes without verbose output by @rudrakshkarpe in [#2488](https://github.com/pydantic/logfire/pull/2488)
* Add `compression` option and zstd experimental support by @Viicos in [#2535](https://github.com/pydantic/logfire/pull/2535)
* Update FastAPI instrumentation to prevent duplicate telemetry by @alexmojaki in [#2524](https://github.com/pydantic/logfire/pull/2524)
* Update Anthropic instrumentation by @alexmojaki in [#2521](https://github.com/pydantic/logfire/pull/2521)
* Keep span message in sync with the name after `update_name` by @darshjoshi in [#2514](https://github.com/pydantic/logfire/pull/2514)
* Expose RFC 9457 problem details on query client errors by @adriangb in [#2511](https://github.com/pydantic/logfire/pull/2511)
* Read stable HTTP semconv attributes when building HTTP span messages by @samuelcolvin in [#2516](https://github.com/pydantic/logfire/pull/2516)
* Update Google GenAI instrumentation by @alexmojaki in [#2523](https://github.com/pydantic/logfire/pull/2523)
* Convert span attribute ints below the int64 minimum to strings by @JoeyTan21 in [#2502](https://github.com/pydantic/logfire/pull/2502)
* Respect repr=False when logging attrs fields by @harbinresearcher in [#2518](https://github.com/pydantic/logfire/pull/2518)
* Default the CLI base URL to LOGFIRE_BASE_URL by @jgjoe in [#2260](https://github.com/pydantic/logfire/pull/2260)
* Create subprocess with no console windows on windows by @marcelotrevisani in [#2507](https://github.com/pydantic/logfire/pull/2507)
* Fix when logfire tries to access a file that has no permission by @marcelotrevisani in [#2464](https://github.com/pydantic/logfire/pull/2464)
* fix: do not treat non-retryable DiskRetryer responses as success by @alexmojaki in [#2529](https://github.com/pydantic/logfire/pull/2529)
* fix explicit context for logfire metrics by @alexmojaki in [#2532](https://github.com/pydantic/logfire/pull/2532)
* Fix OTLP byte POST retries through Session.request by @SAY-5 in [#2503](https://github.com/pydantic/logfire/pull/2503)
(These are the same changes as in v6.0.0b8, but backported to the v5 line.)
## [v5.1.1] (2026-09-25)
* Handle project setup for accounts without organizations by @strawgate in [#2470](https://github.com/pydantic/logfire/pull/2470)
* Enable TCP keepalive and recycle idle connections in Logfire's HTTP sessions by @adriangb in [#2476](https://github.com/pydantic/logfire/pull/2476)
## [v5.1.0] (2026-09-11)
### Integrations
* Add `logfire.instrument_litestar()` with support for Litestar 2.11 and later by @dmontagu in [#2249](https://github.com/pydantic/logfire/pull/2249)
* Recommend Logfire extras when `logfire run` detects missing instrumentation packages by @krishna3554 in [#2082](https://github.com/pydantic/logfire/pull/2082)
### Agent setup
* Use canonical URLs between published Logfire skills by @strawgate in [#2373](https://github.com/pydantic/logfire/pull/2373)
* Preserve the selected Logfire region or custom base URL throughout setup by @strawgate in [#2377](https://github.com/pydantic/logfire/pull/2377)
* Continue project selection and verification after browser authentication by @strawgate in [#2384](https://github.com/pydantic/logfire/pull/2384)
* Make eval setup executable for Python and Node.js by @strawgate in [#2400](https://github.com/pydantic/logfire/pull/2400) and [#2402](https://github.com/pydantic/logfire/pull/2402)
* Correct setup guidance for Python, Node.js, Rust, and Gunicorn by @adtyavrdhn in [#2365](https://github.com/pydantic/logfire/pull/2365)
### Fixes
* Prevent OpenTelemetry logging from deadlocking during `force_flush()` by @L4XB in [#2404](https://github.com/pydantic/logfire/pull/2404)
* Require directory boundaries when identifying non-user code paths by @yhz5613813 in [#2375](https://github.com/pydantic/logfire/pull/2375)
## New Contributors
* @yhz5613813 made their first contribution in [#2375](https://github.com/pydantic/logfire/pull/2375)
* @krishna3554 made their first contribution in [#2082](https://github.com/pydantic/logfire/pull/2082)
* @L4XB made their first contribution in [#2404](https://github.com/pydantic/logfire/pull/2404)
## [v5.0.0] (2026-09-04)
### Major changes
* Changes in format of attributes recorded by GenAI instrumentations:
* Default OpenAI and Anthropic instrumentation to new `version=2` by @alexmojaki in [#2363](https://github.com/pydantic/logfire/pull/2363)
* Support opentelemetry-instrumentation-google-genai>=1.0 by @alexmojaki in [#2092](https://github.com/pydantic/logfire/pull/2092)
* Changes in data recorded by `logfire.instrument_pydantic()`:
* Stop instrumenting third-party Pydantic models by default by @chocoHacks33 in [#2054](https://github.com/pydantic/logfire/pull/2054)
* Record `input_data` on logs produced by `logfire.instrument_pydantic(record='failure')` by @alexmojaki in [#2352](https://github.com/pydantic/logfire/pull/2352)
* Keep tail-sampling buffers until every span in the trace has ended by @gyanu2507 in [#2308](https://github.com/pydantic/logfire/pull/2308)
* Deprecation removals
* Remove deprecated query client APIs by @alexmojaki in [#2333](https://github.com/pydantic/logfire/pull/2333)
* Remove deprecated CLI --logfire-url option by @alexmojaki in [#2362](https://github.com/pydantic/logfire/pull/2362)
* Remove deprecated Flask exclude_urls argument by @alexmojaki in [#2360](https://github.com/pydantic/logfire/pull/2360)
* Remove deprecated configure arguments by @alexmojaki in [#2359](https://github.com/pydantic/logfire/pull/2359)
* Remove deprecated HTTPX capture arguments by @alexmojaki in [#2361](https://github.com/pydantic/logfire/pull/2361)
* Moving modules out of the `logfire.experimental` namespace:
* Move forwarding out of experimental by @alexmojaki in [#2358](https://github.com/pydantic/logfire/pull/2358)
* Move query client out of experimental by @alexmojaki in [#2357](https://github.com/pydantic/logfire/pull/2357)
* Make managed variable pushes strict by default by @alexmojaki in [#2368](https://github.com/pydantic/logfire/pull/2368)
### Other
* Preserve OpenAI cost on deduplicated Agents spans by @alexmojaki in [#2346](https://github.com/pydantic/logfire/pull/2346)
* fix(anthropic): price Bedrock calls under the aws provider by @arthi-arumugam-git in [#2162](https://github.com/pydantic/logfire/pull/2162)
* Report failures from every force_flush pipeline by @alexmojaki in [#2366](https://github.com/pydantic/logfire/pull/2366)
* Change OTel instrumentation scope of pydantic integration to `logfire.pydantic` by @alexmojaki in [#2369](https://github.com/pydantic/logfire/pull/2369)
* Let logfire.configure() finish project setup without a TTY by @strawgate in [#2305](https://github.com/pydantic/logfire/pull/2305)
* Add LOGFIRE_BASE_URL support to Gateway CLI by @bruno-espino in [#2323](https://github.com/pydantic/logfire/pull/2323)
* Refactor dataset retrieval and improve type inference by @alexmojaki in [#2335](https://github.com/pydantic/logfire/pull/2335)
* Handle backend 413 responses for span exports by @Alphaxiaoteng in [#2338](https://github.com/pydantic/logfire/pull/2338)
* Skip the Logfire token check inside AWS Lambda by @reidemeister94 in [#2345](https://github.com/pydantic/logfire/pull/2345)
## [v4.41.0] (2026-08-20)
* Fix two races in Claude Agent SDK tool-use hook instrumentation by @dmontagu in [#2194](https://github.com/pydantic/logfire/pull/2194)
* Parent slow-async-callback spans to the running task by @jirikuncar in [#2209](https://github.com/pydantic/logfire/pull/2209)
* fix(db_statement_summary): bound INSERT summary length like the SELECT path by @chuenchen309 in [#2084](https://github.com/pydantic/logfire/pull/2084)
* Speed up default scrubbing pattern matching by @strawgate in [#2190](https://github.com/pydantic/logfire/pull/2190)
* fix(auth,client): add timeout to outbound HTTP session requests by @bunlongheng in [#2217](https://github.com/pydantic/logfire/pull/2217)
* Warn when a token's region is unrecognised instead of silently defaulting to US by @Pager-dot in [#2229](https://github.com/pydantic/logfire/pull/2229)
* fix: keep the data directory gitignored after logfire clean by @snehankekre in [#2173](https://github.com/pydantic/logfire/pull/2173)
* Warn for unknown token regions outside configuration by @alexmojaki in [#2281](https://github.com/pydantic/logfire/pull/2281)
* Add `system.cpu.load_average.1m` and `system.process.count` by @strawgate in [#2014](https://github.com/pydantic/logfire/pull/2014)
* Limit HTTP connection attempts to three seconds by @alexmojaki in [#2282](https://github.com/pydantic/logfire/pull/2282)
### CLI additions
* Add `logfire projects list --json` by @strawgate in [#2280](https://github.com/pydantic/logfire/pull/2280)
* Let `logfire auth` complete without a TTY by @strawgate in [#2275](https://github.com/pydantic/logfire/pull/2275)
* Add `logfire --non-interactive` by @strawgate in [#2283](https://github.com/pydantic/logfire/pull/2283)
* Add `logfire projects status` by @strawgate in [#2286](https://github.com/pydantic/logfire/pull/2286)
* `projects status`: work from a saved read token alone by @strawgate in [#2296](https://github.com/pydantic/logfire/pull/2296)
## [v4.40.0] (2026-08-05)
* fix(google-genai): break circular reference in span event body by @dmontagu in [#2157](https://github.com/pydantic/logfire/pull/2157)
* Remove `logfire.variables_clear` since it's for tests, not users by @alexmojaki in [#2033](https://github.com/pydantic/logfire/pull/2033)
* Fix three SSE reliability gaps in LogfireRemoteVariableProvider by @dmontagu in [#2144](https://github.com/pydantic/logfire/pull/2144)
* Log transient variables-refresh failures as warnings, not errors by @dmontagu in [#2111](https://github.com/pydantic/logfire/pull/2111)
* feat(variables): ETag/conditional GET and silent 304 handling by @dmontagu in [#2146](https://github.com/pydantic/logfire/pull/2146)
* Fix metric resource PID after fork by @alexmojaki in [#2189](https://github.com/pydantic/logfire/pull/2189)
## [v4.39.0] (2026-07-24)
* `httpx2` support in `logfire.instrument_httpx()` by @alexmojaki in [#2095](https://github.com/pydantic/logfire/pull/2095)
* Support OpenTelemetry SDK 1.44.0 by @alexmojaki in [#2094](https://github.com/pydantic/logfire/pull/2094)
## [v4.38.0] (2026-07-20)
* Add `resource_attributes` and `resource_detectors` options to `logfire.configure` by @dmontagu in [#2012](https://github.com/pydantic/logfire/pull/2012)
* Raise opentelemetry-sdk ceiling to <1.44.0 (allow 1.43) by @hramezani in [#2042](https://github.com/pydantic/logfire/pull/2042)
* Support OpenAI Responses API content parts by @RitwijParmar in [#1981](https://github.com/pydantic/logfire/pull/1981)
* Route managed variables by API key region by @alexmojaki in [#2077](https://github.com/pydantic/logfire/pull/2077)
* Prevent double retrying of ConnectionErrors by @alexmojaki in [#2078](https://github.com/pydantic/logfire/pull/2078)
* Add proper TypedDict types and TypeAdapter validation to datasets API client by @dmontagu in [#1724](https://github.com/pydantic/logfire/pull/1724)
* fix(logfire-api): support bare @logfire.instrument decorator by @syf2211 in [#2047](https://github.com/pydantic/logfire/pull/2047)
* Mark ambiguous run summary recommendations by @snoopuppy582 in [#1926](https://github.com/pydantic/logfire/pull/1926)
## [v4.37.0] (2026-06-12)
* Pre-populate `host.*` and `os.*` resource attributes by @strawgate in [#2013](https://github.com/pydantic/logfire/pull/2013)
* Handle non-finite floats in JSON encoder by @alexmojaki in [#2009](https://github.com/pydantic/logfire/pull/2009)
* fix: guard None text in Anthropic TextBlock during streaming by @axelray-dev in [#2017](https://github.com/pydantic/logfire/pull/2017)
* Avoid truncating rich console arguments by @alexmojaki in [#2008](https://github.com/pydantic/logfire/pull/2008)
* Disable console logging for the 'Logfire configured' log by @alexmojaki in [#2007](https://github.com/pydantic/logfire/pull/2007)
## [v4.36.0] (2026-06-09)
* Composition and templating with native handlebars by @alexmojaki in [#1954](https://github.com/pydantic/logfire/pull/1954)
* Add `pylf_v\d+_` pattern to default scrubbing patterns by @alexmojaki in [#1993](https://github.com/pydantic/logfire/pull/1993)
* Require `logfire.configure()` before lazy remote variables by @alexmojaki in [#2002](https://github.com/pydantic/logfire/pull/2002)
## [v4.35.0] (2026-06-02)
* Add support for new `/v2/query` endoint by @Viicos in [#1897](https://github.com/pydantic/logfire/pull/1897)
This introduces changes to the `LogfireQueryClient` (and its `AsyncLogfireQueryClient` async variant), that are backwards compatible.
However, a couple deprecations were introduced:
* The `query_json()` method was deprecated. Use `query_json_rows()` instead.
* Using the `query_json_rows()` / `query_arrow()` / `query_csv()` methods without providing a `min_timestamp` is deprecated.
See [the announcement](https://pydantic.dev/changelog/new-query-endpoint) for more details.
* Support OpenTelemetry SDK 1.42 by @alexmojaki in [#1978](https://github.com/pydantic/logfire/pull/1978)
* Fix token pattern to accept organization IDs for API keys by @Viicos in [#1980](https://github.com/pydantic/logfire/pull/1980)
## [v4.34.0] (2026-05-26)
* Add `logfire.forward_export_request` and `forward_export_request_starlette` methods by @alexmojaki in [#1974](https://github.com/pydantic/logfire/pull/1974)
* Forward telemetry in a separate thread by @alexmojaki in [#1973](https://github.com/pydantic/logfire/pull/1973)
* Drop Python 3.9 support by @alexmojaki in [#1919](https://github.com/pydantic/logfire/pull/1919)
* Managed variables: Propagate variable version in baggage alongside label by @dmontagu in [#1927](https://github.com/pydantic/logfire/pull/1927)
* Managed variables: Expose `ResolvedVariable.reason` by @alexmojaki in [#1945](https://github.com/pydantic/logfire/pull/1945)
* Handle errors from `traceback.format_exception` by @alexmojaki in [#1948](https://github.com/pydantic/logfire/pull/1948)
* Add `db.query.text` to scrubber `SAFE_KEYS` by @bendrucker in [#1959](https://github.com/pydantic/logfire/pull/1959)
## [v4.33.0] (2026-05-13)
CLI:
* feat: gateway cli command by @ddanielcruzz in [#1915](https://github.com/pydantic/logfire/pull/1915)
* CLI: Use remote MCP server by @jirikuncar in [#1884](https://github.com/pydantic/logfire/pull/1884)
* refactor: reuse AI tool MCP setup in prompt CLI by @ddanielcruzz in [#1921](https://github.com/pydantic/logfire/pull/1921)
* Avoid raising error on `prompt` command without `--project` by @Kludex in [#1912](https://github.com/pydantic/logfire/pull/1912)
Integrations:
* Support new TaskSpanData and TurnSpanData from openai-agents 0.14 by @alexmojaki in [#1888](https://github.com/pydantic/logfire/pull/1888)
* Update surrealdb integration for 2.x by @alexmojaki in [#1899](https://github.com/pydantic/logfire/pull/1899)
* feat: support capture parameters for asyncpg by @thisisarko in [#1896](https://github.com/pydantic/logfire/pull/1896)
* perf: avoid full response `model_dump` in usage cost path by @imp-joshi in [#1886](https://github.com/pydantic/logfire/pull/1886)
Other:
* Support OTel 1.41.0 by @alexmojaki in [#1874](https://github.com/pydantic/logfire/pull/1874)
* Drop support for Python < 3.9.2 by @alexmojaki in [#1920](https://github.com/pydantic/logfire/pull/1920)
* Add `logfire.version` to resource attributes by @alexmojaki in [#1911](https://github.com/pydantic/logfire/pull/1911)
* Optionally emit configuration log after `logfire.configure()` by @Kludex in [#1904](https://github.com/pydantic/logfire/pull/1904)
* Add `level` param to `@logfire.instrument()` by @imp-joshi in [#1871](https://github.com/pydantic/logfire/pull/1871)
* Clean up DiskRetryer temp dirs on shutdown by @alexmojaki in [#1866](https://github.com/pydantic/logfire/pull/1866)
* Datasets SDK: upload dataset-level + report-level evaluators by @dmontagu in [#1879](https://github.com/pydantic/logfire/pull/1879)
* End open spans earlier in process shutdown to prevent dangling pending spans by @alexmojaki in [#1890](https://github.com/pydantic/logfire/pull/1890)
* adding .agents for library-skills by @adtyavrdhn in [#1894](https://github.com/pydantic/logfire/pull/1894)
* feat: surface X-Logfire-Warning header by @adriangb in [#1906](https://github.com/pydantic/logfire/pull/1906)
* Add user agent to query client by @Viicos in [#1875](https://github.com/pydantic/logfire/pull/1875)
## [v4.32.1] (2026-04-15)
* Support OpenTelemetry SDK 1.40.0 by @alexmojaki in [#1861](https://github.com/pydantic/logfire/pull/1861)
* Do row→column transformation client-side in query client by @adriangb in [#1862](https://github.com/pydantic/logfire/pull/1862)
* Mark various genai attributes as safe from scrubbing by @alexmojaki in [#1863](https://github.com/pydantic/logfire/pull/1863)
## [v4.32.0] (2026-04-10)
* Add `push_dataset` helpers to the experimental API client by @dmontagu in [#1848](https://github.com/pydantic/logfire/pull/1848)
## [v4.31.2] (2026-04-10)
* fix: Show token badges for OpenAI streaming logs by @alexmojaki in [#1857](https://github.com/pydantic/logfire/pull/1857)
* fix: OTel warning during tail sampling buffer replay by @cyberksh in [#1632](https://github.com/pydantic/logfire/pull/1632)
## [v4.31.1] (2026-04-09)
* Capture token usage and cost attributes in OpenAI streaming logs by @alexmojaki in [#1846](https://github.com/pydantic/logfire/pull/1846)
* Capture token usage and cost attributes in Anthropic streaming logs by @alexmojaki in [#1850](https://github.com/pydantic/logfire/pull/1850)
* Capture `operation.cost` for OpenAI embeddings by @alexmojaki in [#1843](https://github.com/pydantic/logfire/pull/1843)
* Capture `gen_ai.usage.raw` for Anthropic by @alexmojaki in [#1847](https://github.com/pydantic/logfire/pull/1847)
* fix: strip `cf-connecting-ip` header in `forward_export_request` by @BreytMN in [#1824](https://github.com/pydantic/logfire/pull/1824)
* Handle patching of `sys.stdout` better by @alexmojaki in [#1840](https://github.com/pydantic/logfire/pull/1840)
## [v4.31.0] (2026-03-27)
* Add `logfire.instrument_claude_agent_sdk()` by @alexmojaki in [#1799](https://github.com/pydantic/logfire/pull/1799)
* feat: add `logfire.url_from_eval(report)` method by @Kludex in [#1694](https://github.com/pydantic/logfire/pull/1694)
* fix: include cached tokens in `gen_ai.usage.input_tokens` for Anthropic by @alexmojaki in [#1812](https://github.com/pydantic/logfire/pull/1812)
* fix: handle bare MCP request types for fastmcp 3.x compatibility by @alexmojaki in [#1813](https://github.com/pydantic/logfire/pull/1813)
## [v4.30.0] (2026-03-23)
* Add `logfire auth logout` command by @ai-man-codes in [#1781](https://github.com/pydantic/logfire/pull/1781)
* Remove Rich link styling from project URL output by @ameenalkhaldi in [#1784](https://github.com/pydantic/logfire/pull/1784)
* Fix push_config() to push labels and versions by @dmontagu in [#1785](https://github.com/pydantic/logfire/pull/1785)
* Merge `export_dataset` into `get_dataset` with `include_cases` parameter by @Kludex in [#1792](https://github.com/pydantic/logfire/pull/1792)
## [v4.29.0] (2026-03-13)
* Add `gen_ai.usage.raw` attribute to OpenAI Responses spans by @alexmojaki in [#1777](https://github.com/pydantic/logfire/pull/1777)
## [v4.28.0] (2026-03-11)
* Handle anthropic beta messages and refactor by @alexmojaki in [#1774](https://github.com/pydantic/logfire/pull/1774)
* Delete redundant `logfire.experimental.datasets` package by @alexmojaki in [#1763](https://github.com/pydantic/logfire/pull/1763)
* Change `logfire_pytest` fixture scope to session by @jirikuncar in [#1758](https://github.com/pydantic/logfire/pull/1758)
## [v4.27.0] (2026-03-06)
* Add `gen_ai.system` attribute to anthropic spans, enabling token/cost badges by @alexmojaki in [#1760](https://github.com/pydantic/logfire/pull/1760)
* Set `operation.cost` attribute on anthropic spans when `genai-prices` is installed by @alexmojaki in [#1761](https://github.com/pydantic/logfire/pull/1761)
## [v4.26.0] (2026-03-06)
* feat: add browser proxy helpers: `forward_export_request` and `logfire_proxy` by @AlanPonnachan in [#1697](https://github.com/pydantic/logfire/pull/1697)
* Handle pickling errors in `dataclasses.asdict` by @alexmojaki in [#1756](https://github.com/pydantic/logfire/pull/1756)
* Use additionalProperties for homogeneous dict schemas by @adriangb in [#1738](https://github.com/pydantic/logfire/pull/1738)
## [v4.25.0] (2026-02-19)
* Add experimental datasets package by @dmontagu in [#1711](https://github.com/pydantic/logfire/pull/1711)
* Extract langsmith provider name by @alexmojaki in [#1720](https://github.com/pydantic/logfire/pull/1720)
## [v4.24.0] (2026-02-13)
* Add managed variables by @dmontagu in [#1691](https://github.com/pydantic/logfire/pull/1691)
## [v4.23.0] (2026-02-12)
* feat: Add `logfire.db_api` — PEP 249 DB API 2.0 interface by @dmontagu in [#1692](https://github.com/pydantic/logfire/pull/1692)
* Add semantic convention message attributes to LLM integrations by @dmontagu in [#1705](https://github.com/pydantic/logfire/pull/1705)
* Fix some attributes in langsmith and openai_agents spans @alexmojaki in [#1696](https://github.com/pydantic/logfire/pull/1696)
* feat: support for pytest-xdist traceparent propagation by @jirikuncar in [#1701](https://github.com/pydantic/logfire/pull/1701)
* fix: re-attach OTel span context in pytest async test functions by @jirikuncar in [#1693](https://github.com/pydantic/logfire/pull/1693)
## [v4.22.0] (2026-02-04)
* feat: Add multi-token support for project migration by @adriangb in [#1672](https://github.com/pydantic/logfire/pull/1672)
* Fix google_genai integration crash when Gemini returns parts=None by @alexmojaki in [#1678](https://github.com/pydantic/logfire/pull/1678)
## [v4.21.0] (2026-01-28)
* feat: Add OTel Gen AI semantic convention scalar attributes by @brightsparc in [#1657](https://github.com/pydantic/logfire/pull/1657)
* Handle langchain reasoning summaries by @alexmojaki in [#1665](https://github.com/pydantic/logfire/pull/1665)
* Fix Responses API streaming error handling to not mask original errors by @jordanhboxer in [#1668](https://github.com/pydantic/logfire/pull/1668)
* Only patch `os.exit` once by @alexmojaki in [#1663](https://github.com/pydantic/logfire/pull/1663)
## [v4.20.0] (2026-01-26)
* feat: pytest integration by @jirikuncar in [#1648](https://github.com/pydantic/logfire/pull/1648)
* fix: anthropic response data should include tool call id by @mathislucka in [#1636](https://github.com/pydantic/logfire/pull/1636)
## [v4.19.0] (2026-01-16)
* Add DSPy integration to logfire by @bdsaglam in [#1625](https://github.com/pydantic/logfire/pull/1625)
* Set log level based on HTTP status code, create issues for handled exceptions in FastAPI when the status code is 5xx by @alexmojaki in [#1628](https://github.com/pydantic/logfire/pull/1628)
* Add OTel GenAI semantic convention attributes to LLM instrumentations by @jimilp7 in [#1619](https://github.com/pydantic/logfire/pull/1619)
* Minor optimization: move tweaking of ASGI send/receive span level by @alexmojaki in [#1629](https://github.com/pydantic/logfire/pull/1629)
## [v4.18.0] (2026-01-12)
* Adds `aiohttp` request body capture. by @adtyavrdhn in [#1595](https://github.com/pydantic/logfire/pull/1595)
* Claude SDK instrumentation by @alexmojaki in [#1618](https://github.com/pydantic/logfire/pull/1618)
## [v4.17.0] (2026-01-07)
* `logfire.instrument_surrealdb` by @alexmojaki in [#1573](https://github.com/pydantic/logfire/pull/1573)
* feat(config): allow custom Views in MetricOptions by @cyberksh in [#1552](https://github.com/pydantic/logfire/pull/1552)
* Handle unpicklable configuration in `ProcessPoolExecutor` patch #1556 by @pipinstalled in [#1567](https://github.com/pydantic/logfire/pull/1567)
* Maintain original LLM request context when logging the streaming response by @yiphei in [#1566](https://github.com/pydantic/logfire/pull/1566)
* Add note about `write_token` permission in `logfire projects` commands by @Viicos in [#1545](https://github.com/pydantic/logfire/pull/1545)
## [v4.16.0] (2025-12-04)
* Support OpenTelemetry 1.39.0, drop support for earlier versions, stop using the OTel events API/SDK by @alexmojaki in [#1562](https://github.com/pydantic/logfire/pull/1562)
* Add `new_trace` parameter to `logfire.instrument` by @njz-cvm in [#1499](https://github.com/pydantic/logfire/pull/1499)
* Fix JSON serialization error with `instrument_google_genai` by @alexmojaki in [#1551](https://github.com/pydantic/logfire/pull/1551)
* Support kwargs in `ProxyLogger` `emit()` by @qianl15 in [#1561](https://github.com/pydantic/logfire/pull/1561)
## [v4.15.1] (2025-11-20)
* Make `logfire.instrument`ed functions cloudpicklable by @alexmojaki in [#1542](https://github.com/pydantic/logfire/pull/1542)
## [v4.15.0] (2025-11-19)
* Limit retried exports based on total size, not number by @alexmojaki in [#1527](https://github.com/pydantic/logfire/pull/1527)
* More tweaks to retrying exports by @alexmojaki in [#1531](https://github.com/pydantic/logfire/pull/1531)
## [v4.14.2] (2025-10-24)
* Ensure `OTEL_EXPORTER_OTLP_HEADERS` doesn't override logfire token by @alexmojaki in [#1500](https://github.com/pydantic/logfire/pull/1500)
## [v4.14.1] (2025-10-22)
* Skip recording exceptions on `NonRecordingSpan` by @alexmojaki in [#1497](https://github.com/pydantic/logfire/pull/1497)
## [v4.14.0] (2025-10-21)
* Support OpenTelemetry 1.38, fix `instrument_google_genai` and `instrument_langchain` by @alexmojaki in [#1495](https://github.com/pydantic/logfire/pull/1495)
## [v4.13.2] (2025-10-13)
* Comply with opencode MCP format by @Kludex in [#1488](https://github.com/pydantic/logfire/pull/1488)
## [v4.13.1] (2025-10-13)
* Add "type" keyword on opencode MCP settings by @Kludex in [#1486](https://github.com/pydantic/logfire/pull/1486)
## [v4.13.0] (2025-10-09)
* Store OpenAI Responses streaming response in events format understood by UI by @alexmojaki in [#1479](https://github.com/pydantic/logfire/pull/1479)
* Add `output` option to `logfire.ConsoleOptions`, e.g. to log to stderr instead of stdout by @stevenh in [#1477](https://github.com/pydantic/logfire/pull/1477)
* Update `logfire.instrument_pydantic_ai()` parameters by @alexmojaki in [#1480](https://github.com/pydantic/logfire/pull/1480)
## [v4.12.0] (2025-10-08)
* Record response when streaming OpenAI Responses API by @stevenh in [#1457](https://github.com/pydantic/logfire/pull/1457)
* Record `operation.cost` span attribute on OpenAI spans by @alexmojaki in [#1468](https://github.com/pydantic/logfire/pull/1468)
## [v4.11.0] (2025-10-03)
* Add experimental `exception_callback` configuration by @alexmojaki in [#1355](https://github.com/pydantic/logfire/pull/1355)
* Support Instrumenting Async SqlAlchemy Engines by @dhruv-ahuja in [#1425](https://github.com/pydantic/logfire/pull/1425)
* Always collect `operation.cost` metric in spans by @alexmojaki in [#1435](https://github.com/pydantic/logfire/pull/1435)
* Update `pyproject.toml` to be PEP639 compliant by @Kludex in [#1429](https://github.com/pydantic/logfire/pull/1429)
* Improve `canonicalize_exception_traceback` for `RecursionError` by @alexmojaki in [#1455](https://github.com/pydantic/logfire/pull/1455)
## [v4.10.0] (2025-09-24)
* Trigger `auth` command from `prompt` by @Kludex in [#1423](https://github.com/pydantic/logfire/pull/1423)
* Remove conditional check on OTEL version for `Gauge` import by @Viicos in [#1426](https://github.com/pydantic/logfire/pull/1426)
## [v4.9.0] (2025-09-22)
* Fix Root Model Not Rendering As Expected by @dhruv-ahuja in [#1396](https://github.com/pydantic/logfire/pull/1396)
* Use `=` instead of `:` in codex setup by @Kludex in [#1420](https://github.com/pydantic/logfire/pull/1420)
* Add support for OpenCode on the `prompt` command by @Kludex in [#1421](https://github.com/pydantic/logfire/pull/1421)
## [v4.8.0] (2025-09-18)
* Allow capturing headers and response body with `logfire.instrument_aiohttp_client()` by @adtyavrdhn in [#1405](https://github.com/pydantic/logfire/pull/1405) and [#1409](https://github.com/pydantic/logfire/pull/1409)
## [v4.7.0] (2025-09-12)
* Update to OpenTelemetry SDK 1.37.0, drop support for <1.35.0 by @alexmojaki in [#1398](https://github.com/pydantic/logfire/pull/1398)
## [v4.6.0] (2025-09-10)
* Fix: check `LOGFIRE_IGNORE_NO_CONFIG` from environment when needed by @Lftobs in [#1379](https://github.com/pydantic/logfire/pull/1379)
* Expand scrubbing whitelist, especially for `gen_ai` messages by @alexmojaki in [#1392](https://github.com/pydantic/logfire/pull/1392)
* Print project link eagerly from credentials file if possible by @alexmojaki in [#1393](https://github.com/pydantic/logfire/pull/1393)
* Fix: Only list orgs in CLI where projects can be created by @alexmojaki in [#1391](https://github.com/pydantic/logfire/pull/1391)
## [v4.5.0] (2025-09-09)
* Export `attach_context` and `get_context` directly from `logfire` module, not just `logfire.propagate` by @dhruv-ahuja in [#1385](https://github.com/pydantic/logfire/pull/1385)
* Only list writeable projects from CLI by @alexmojaki in [#1386](https://github.com/pydantic/logfire/pull/1386)
* Add `ensure_ascii=False` to `json.dumps` calls by @qiangxinglin in [#1381](https://github.com/pydantic/logfire/pull/1381)
* Remove unused `stack_offset` from `with_settings()` by @LucasSantos27 in [#1380](https://github.com/pydantic/logfire/pull/1380)
## [v4.4.0] (2025-09-05)
* Add `logfire.instrument_print()` by @alexmojaki in [#1368](https://github.com/pydantic/logfire/pull/1368)
* Record response on 'MCP server handle request' span by @alexmojaki in [#1362](https://github.com/pydantic/logfire/pull/1362)
* Handle MCP request metadata being a dict by @alexmojaki in [#1360](https://github.com/pydantic/logfire/pull/1360)
* fix: handle optional args in `logfire.instrument` by @stevenh in [#1337](https://github.com/pydantic/logfire/pull/1337)
* Add `logfire_token` to scrubbing patterns by @alexmojaki in [#1367](https://github.com/pydantic/logfire/pull/1367)
## [v4.3.6] (2025-08-26)
* Add specific code agent options for `logfire prompt` by @Kludex in [#1350](https://github.com/pydantic/logfire/pull/1350)
## [v4.3.5] (2025-08-22)
* Add `--base-url` to CLI by @Kludex in [#1345](https://github.com/pydantic/logfire/pull/1345)
* Don't require stream kwarg in OpenAI methods by @alexmojaki in [#1348](https://github.com/pydantic/logfire/pull/1348)
## [v4.3.4] (2025-08-21)
* `logfire.instrument_google_genai()` fixes for `response_schema` and elided content by @alexmojaki in [#1342](https://github.com/pydantic/logfire/pull/1342)
* Fix `enable_commenter` and `commenter_options` args of `instrument_sqlalchemy` by @alexmojaki in [#1335](https://github.com/pydantic/logfire/pull/1335)
* Fix LangChain instrumentation by @alexmojaki in [#1319](https://github.com/pydantic/logfire/pull/1319)
* Suppress `urllib3` logs while checking token by @alexmojaki in [#1341](https://github.com/pydantic/logfire/pull/1341)
## [v4.3.3] (2025-08-13)
* Ensure `logfire_api.LogfireSpan.context` and other attrs are None by @alexmojaki in [#1317](https://github.com/pydantic/logfire/pull/1317)
## [v4.3.2] (2025-08-13)
* Able to see output from token selection by @Kludex in [#1312](https://github.com/pydantic/logfire/pull/1312)
* Remove trailing `/` from prompts call by @Kludex in [#1314](https://github.com/pydantic/logfire/pull/1314)
* Change get read token info endpoint by @hramezani in [#1309](https://github.com/pydantic/logfire/pull/1309)
## [v4.3.1] (2025-08-12)
* Fix `logfire_api` requiring OpenTelemetry SDK by @alexmojaki in [#1310](https://github.com/pydantic/logfire/pull/1310)
## [v4.3.0] (2025-08-12)
* Closes logfire_api.LogfireSpan should support ReadableSpan attributes #989 by @RichardMarto in [#1288](https://github.com/pydantic/logfire/pull/1288)
* Fix `test_instrument_google_genai` for specific versions by @alexmojaki in [#1303](https://github.com/pydantic/logfire/pull/1303)
* Create read tokens via CLI by @Kludex in [#1306](https://github.com/pydantic/logfire/pull/1306)
* Retrieve the prompt to fix issues via CLI by @Kludex in [#1307](https://github.com/pydantic/logfire/pull/1307)
## [v4.2.0] (2025-08-06)
* Handle wrong JSON schema in console exporter by @alexmojaki in [#1294](https://github.com/pydantic/logfire/pull/1294)
* Move creation of span down on cli by @Kludex in [#1298](https://github.com/pydantic/logfire/pull/1298)
* Allow to set `instrument_httpx(capture_all=True)` via env var by @Kludex in [#1295](https://github.com/pydantic/logfire/pull/1295)
## [v4.1.0] (2025-08-04)
* Add `min_level` argument to `logfire.configure` by @alexmojaki in [#1265](https://github.com/pydantic/logfire/pull/1265)
## [v4.0.1] (2025-07-31)
* Handle cyclic references in exceptions by @alexmojaki in [#1284](https://github.com/pydantic/logfire/pull/1284)
* Support OpenTelemetry 1.36.0 by @alexmojaki in [#1285](https://github.com/pydantic/logfire/pull/1285)
## [v4.0.0] (2025-07-22)
**BREAKING CHANGES**:
* Remove extra FastAPI spans by default by @alexmojaki in [#1268](https://github.com/pydantic/logfire/pull/1268)
* Stop implicitly emitting deprecated process runtime metrics by @alexmojaki in [#932](https://github.com/pydantic/logfire/pull/932)
## [v3.25.0] (2025-07-18)
* Use local timezone in console logging by @fswair in [#1255](https://github.com/pydantic/logfire/pull/1255)
* Add `logfire run` command by @Kludex in [#1139](https://github.com/pydantic/logfire/pull/1139)
* Allow removing extra FastAPI spans by @alexmojaki in [#1258](https://github.com/pydantic/logfire/pull/1258)
* Fix `litellm` instrumentation by @alexmojaki in [#1249](https://github.com/pydantic/logfire/pull/1249)
* Add `logfire.exception.fingerprint` attribute to spans with exceptions by @alexmojaki in [#1253](https://github.com/pydantic/logfire/pull/1253)
## [v3.24.2] (2025-07-14)
* Fix auto-tracing Python 3.12 ParamSpec syntax by @alexmojaki in [#1247](https://github.com/pydantic/logfire/pull/1247)
## [v3.24.1] (2025-07-14)
* Support OpenTelemetry 1.35.0 by @alexmojaki in [#1242](https://github.com/pydantic/logfire/pull/1242)
## [v3.24.0] (2025-07-10)
* Add experimental `logfire.instrument_litellm()` by @alexmojaki in [#1237](https://github.com/pydantic/logfire/pull/1237)
## [v3.23.0] (2025-07-08)
* Add info method to logfire query clients by @hramezani in [#1204](https://github.com/pydantic/logfire/pull/1204)
* Make query client not experimental by @alexmojaki in [#1234](https://github.com/pydantic/logfire/pull/1234)
## [v3.22.1] (2025-07-07)
* Fix OpenAI streaming reasoning by @alexmojaki in [#1232](https://github.com/pydantic/logfire/pull/1232)
* Handle bytes in google genai messages by @alexmojaki in [#1231](https://github.com/pydantic/logfire/pull/1231)
## [v3.22.0] (2025-07-02)
* Add `instrument_google_genai` by @alexmojaki in [#1217](https://github.com/pydantic/logfire/pull/1217)
* Refactor user tokens, introduce Logfire client by @Viicos in [#981](https://github.com/pydantic/logfire/pull/981)
* Use new endpoint for project creation by @hramezani in [#1202](https://github.com/pydantic/logfire/pull/1202)
## [v3.21.2] (2025-06-30)
* Fix importlib resources with auto tracing by @alexmojaki in [#1212](https://github.com/pydantic/logfire/pull/1212)
## [v3.21.1] (2025-06-18)
* Fix for new OpenAI Agents SDK by @alexmojaki in [#1152](https://github.com/pydantic/logfire/pull/1152)
## [v3.21.0] (2025-06-17)
* Add up counter/histogram metrics in spans by @alexmojaki in [#1099](https://github.com/pydantic/logfire/pull/1099)
* Fix kwargs in proxy metric instruments, preventing warning about duplicate histograms by @alexmojaki in [#1149](https://github.com/pydantic/logfire/pull/1149)
## [v3.20.0] (2025-06-16)
* Add baggage utilities by @dmontagu in [#1128](https://github.com/pydantic/logfire/pull/1128)
* Handle NonRecordingSpans correctly in OpenAI instrumentation by @alexmojaki in [#1145](https://github.com/pydantic/logfire/pull/1145)
## [v3.19.0] (2025-06-12)
* `logfire.instrument_aiohttp_server()` by @adtyavrdhn in [#1131](https://github.com/pydantic/logfire/pull/1131)
* Fix handling of `pydantic_core.Url` and `pydantic.AnyUrl` by @dmontagu in [#1130](https://github.com/pydantic/logfire/pull/1130)
* Correct context for MCP logs by @alexmojaki in [#1138](https://github.com/pydantic/logfire/pull/1138)
* Check empty tokens before making connection attempt by @nagarajRPoojari in [#1110](https://github.com/pydantic/logfire/pull/1110)
* Pass meter provider to Pydantic AI by @alexmojaki in [#1136](https://github.com/pydantic/logfire/pull/1136)
## [v3.18.0] (2025-06-05)
* Upgrade to OpenTelemetry SDK 1.34.0 by @alexmojaki in [#1120](https://github.com/pydantic/logfire/pull/1120)
* Drop Python 3.8 support by @alexmojaki in [#1122](https://github.com/pydantic/logfire/pull/1122)
## [v3.17.0] (2025-06-03)
* LangChain instrumentation via LangSmith by @alexmojaki in [#1084](https://github.com/pydantic/logfire/pull/1084)
* MCP OTel context propagation by @samuelcolvin in [#1103](https://github.com/pydantic/logfire/pull/1103)
* Add `capfire.get_collected_metrics()` by @alexmojaki in [#1116](https://github.com/pydantic/logfire/pull/1116)
## [v3.16.2] (2025-06-03)
* Fixes for OpenAI Responses API and Agents SDK by @alexmojaki in [#1092](https://github.com/pydantic/logfire/pull/1092), [#1093](https://github.com/pydantic/logfire/pull/1093), [#1094](https://github.com/pydantic/logfire/pull/1094), and [#1095](https://github.com/pydantic/logfire/pull/1095)
* Fix verbose console formatting for enum, dates, and decimals by @sbhrwlr in [#1096](https://github.com/pydantic/logfire/pull/1096)
* Allow setting `logfire.msg` in structlog integration by @alexmojaki in [#1113](https://github.com/pydantic/logfire/pull/1113)
* Add ASGI instrumentation package to `django` extra by @alexmojaki in [#1097](https://github.com/pydantic/logfire/pull/1097)
## [v3.16.1] (2025-05-26)
* Infer base URL from read token in query client by @Viicos in [#1088](https://github.com/pydantic/logfire/pull/1088)
* Add `include_binary_content` ([#1090](https://github.com/pydantic/logfire/pull/1090)) and `**kwargs` ([#1078](https://github.com/pydantic/logfire/pull/1078)) to `instrument_pydantic_ai` by @alexmojaki
## [v3.16.0] (2025-05-14)
* Make OpenAI spans show token usage in logfire UI by @alexmojaki in [#1076](https://github.com/pydantic/logfire/pull/1076)
* Fixes for verbose console logging by @alexmojaki in [#1071](https://github.com/pydantic/logfire/pull/1071) and [#1072](https://github.com/pydantic/logfire/pull/1072)
* Export first batch of spans more quickly by @alexmojaki in [#1066](https://github.com/pydantic/logfire/pull/1066)
* Tighten scrubbing patterns to reduce accidental matches by @alexmojaki in [#1074](https://github.com/pydantic/logfire/pull/1074)
* Add `do_not_scrub` and `binary_content` as safe keys for scrubber by @alexmojaki in [#1075](https://github.com/pydantic/logfire/pull/1075)
## [v3.15.1] (2025-05-12)
* Support OpenTelemetry SDK 1.33.0 by @alexmojaki in [#1067](https://github.com/pydantic/logfire/pull/1067)
## [v3.15.0] (2025-05-08)
* Remove attributes from `http.server.active_requests` metric to prevent emitting too many by @alexmojaki in [#1060](https://github.com/pydantic/logfire/pull/1060)
* This is technically a breaking change as it means less data is sent to Logfire, but most users don't use it and some will save a significant amount of money.
## [v3.14.1] (2025-04-24)
* Handle changes in `openai` and `anthropic` by @alexmojaki in [#1030](https://github.com/pydantic/logfire/pull/1030)
* Fix exporting of very large spans and payloads by @alexmojaki in [#1027](https://github.com/pydantic/logfire/pull/1027)
* Prevent infinite loop in `get_user_frame_and_stacklevel` by @alexmojaki in [#1031](https://github.com/pydantic/logfire/pull/1031)
## [v3.14.0] (2025-04-11)
* Experimental functions for recording feedback annotations
## [v3.13.1] (2025-04-10)
* Upgrade to OpenTelemetry SDK 1.32.0 by @alexmojaki in [#991](https://github.com/pydantic/logfire/pull/991)
## [v3.13.0] (2025-04-10)
* Emit logs sent from MCP server to client by @alexmojaki in [#974](https://github.com/pydantic/logfire/pull/974)
* Return `None` from `logfire_api.LogfireSpan.context` when `logfire` could not be imported by @DouweM in [#983](https://github.com/pydantic/logfire/pull/983)
## [v3.12.0] (2025-03-31)
* Add `logfire.instrument_mcp()` method by @alexmojaki in [#966](https://github.com/pydantic/logfire/pull/966)
* Merge headers if passed via `client_kwargs` in query client by @Kludex in [#958](https://github.com/pydantic/logfire/pull/958)
* Warn user if f-string expression contains `await` by @Sbargaoui in [#944](https://github.com/pydantic/logfire/pull/944)
* Handle new MCP span in OpenAI Agents SDK by @alexmojaki in [#963](https://github.com/pydantic/logfire/pull/963)
## [v3.11.0] (2025-03-26)
* Add `record_return` flag to `@logfire.instrument` by @alexmojaki in [#955](https://github.com/pydantic/logfire/pull/955)
## [v3.10.0] (2025-03-25)
* Account for new EU region by @Viicos in [#901](https://github.com/pydantic/logfire/pull/901)
## [v3.9.1] (2025-03-25)
* Handle Anthropic thinking blocks by @alexmojaki in [#952](https://github.com/pydantic/logfire/pull/952)
* Handle new voice span types from OpenAI Agents SDK by @alexmojaki in [#943](https://github.com/pydantic/logfire/pull/943)
## [v3.9.0] (2025-03-18)
* Add `logfire.instrument_pydantic_ai()` by @alexmojaki in [#926](https://github.com/pydantic/logfire/pull/926)
## [v3.8.1] (2025-03-13)
* Upgrade to OpenTelemetry 1.31.0 by @alexmojaki in [#927](https://github.com/pydantic/logfire/pull/927)
* Record exception with traceback for non-fatal function tool errors in OpenAI agents SDK by @alexmojaki in [#924](https://github.com/pydantic/logfire/pull/924)
## [v3.8.0] (2025-03-11)
* OpenAI Agents Framework instrumentation by @alexmojaki in [#917](https://github.com/pydantic/logfire/pull/917)
* OTel log scrubbing by @alexmojaki in [#903](https://github.com/pydantic/logfire/pull/903)
## [v3.7.1] (2025-03-05)
* Handle errors in OpenAI response by @alexmojaki in [#910](https://github.com/pydantic/logfire/pull/910)
* Include domain in message for outgoing HTTP requests: fix for old semconv by @alexmojaki in [#909](https://github.com/pydantic/logfire/pull/909)
## [v3.7.0] (2025-03-04)
* Include domain in message for outgoing requests by @alexmojaki in [#892](https://github.com/pydantic/logfire/pull/892)
* Console logging for OTel logs by @alexmojaki in [#882](https://github.com/pydantic/logfire/pull/882)
* Fix auto-tracing with `python -m` by @alexmojaki in [#905](https://github.com/pydantic/logfire/pull/905)
## [v3.6.4] (2025-02-25)
* Handle mocks by calling `to_dict` on type by @alexmojaki in [#897](https://github.com/pydantic/logfire/pull/897)
## [v3.6.3] (2025-02-25)
* Handle missing `shutdown` and `force_flush` on `NoOpLoggerProvider` better by @alexmojaki in [#895](https://github.com/pydantic/logfire/pull/895)
* Handle missing events SDK by @alexmojaki in [#893](https://github.com/pydantic/logfire/pull/893)
## [v3.6.2] (2025-02-22)
* Fix typing errors involving `handle_internal_errors` by @alexmojaki in [#885](https://github.com/pydantic/logfire/pull/885)
* Avoid double shutdown of logger provider by @alexmojaki in [#878](https://github.com/pydantic/logfire/pull/878)
## [v3.6.1] (2025-02-19)
* avoid `BatchLogRecordProcessor` use on pyodide/emscripten by @samuelcolvin in [#873](https://github.com/pydantic/logfire/pull/873)
## [v3.6.0] (2025-02-18)
* Set log level to warning instead of error for 4xx HTTPExceptions from FastAPI/Starlette by @alexmojaki in [#858](https://github.com/pydantic/logfire/pull/858)
* Add option to disable printing tags to console by @dmontagu in [#860](https://github.com/pydantic/logfire/pull/860)
* Experimental support for OTel logs by @alexmojaki in [#863](https://github.com/pydantic/logfire/pull/863), [#870](https://github.com/pydantic/logfire/pull/870), and [#871](https://github.com/pydantic/logfire/pull/871)
* Fix `excluded_urls` typo in instrument_flask by @alexmojaki in [#852](https://github.com/pydantic/logfire/pull/852)
* Catch more errors when checking for sqlalchemy objects by @alexmojaki in [#854](https://github.com/pydantic/logfire/pull/854)
* Don't scrub exception message by @alexmojaki in [#865](https://github.com/pydantic/logfire/pull/865)
* Only skip logging to console after updating span stack and indentation by @alexmojaki in [#844](https://github.com/pydantic/logfire/pull/844)
## [v3.5.3] (2025-02-05)
* Fixes for capturing httpx bodies by @alexmojaki in [#842](https://github.com/pydantic/logfire/pull/842)
## [v3.5.2] (2025-02-05)
* Support OpenTelemetry 1.30.0 by @alexmojaki in [#839](https://github.com/pydantic/logfire/pull/839)
## [v3.5.1] (2025-02-04)
* Prevent side effects when importing logfire by @alexmojaki in [#835](https://github.com/pydantic/logfire/pull/835)
## [v3.5.0] (2025-02-03)
* Add `logfire.logfire_info()` by @samuelcolvin in [#826](https://github.com/pydantic/logfire/pull/826)
* Add `logfire.add_non_user_code_prefix` function for library developers by @dmontagu in [#829](https://github.com/pydantic/logfire/pull/829)
* Skip export retry in pyodide by @samuelcolvin in [#823](https://github.com/pydantic/logfire/pull/823)
* More resilient console logging by @samuelcolvin in [#831](https://github.com/pydantic/logfire/pull/831)
## [v3.4.0] (2025-01-27)
* Support Pyodide by @samuelcolvin in [#818](https://github.com/pydantic/logfire/pull/818)
## [v3.3.0] (2025-01-22)
* Add process runtime information by @Kludex in [#811](https://github.com/pydantic/logfire/pull/811)
## [v3.2.0] (2025-01-17)
* Fix conflict with `ddtrace` futures patching by renaming `fn` parameter by @alexmojaki in [#802](https://github.com/pydantic/logfire/pull/802)
* Add `logfire.warning` to mirror `logging.warning` by @JacobHayes in [#800](https://github.com/pydantic/logfire/pull/800)
* Try `to_dict` method when encoding JSON by @alexmojaki in [#799](https://github.com/pydantic/logfire/pull/799)
* Don't truncate numpy array dimensions below max by @alexmojaki in [#792](https://github.com/pydantic/logfire/pull/792)
## [v3.1.1] (2025-01-14)
* Prevent OTel from logging noisy traceback for handled requests exceptions by @alexmojaki in [#796](https://github.com/pydantic/logfire/pull/796)
## [v3.1.0] (2025-01-09)
* Add `capture_all` to `instrument_httpx` by @Kludex in [#780](https://github.com/pydantic/logfire/pull/780)
* Ensure cleanup when forked process ends by @alexmojaki in [#785](https://github.com/pydantic/logfire/pull/785)
* Generate trace IDs as ULIDs by default by @adriangb in [#783](https://github.com/pydantic/logfire/pull/783)
## [v3.0.0] (2025-01-07)
* **BREAKING CHANGE**: Removed `capture_request_json_body`, `capture_request_text_body`, `capture_request_form_data`, and `capture_response_json_body` parameters from `logfire.instrument_httpx()`, replaced with `capture_request_body` `capture_response_body` by @Kludex in [#769](https://github.com/pydantic/logfire/pull/769)
Other changes:
* Add `distributed_tracing` argument to `logfire.configure()` and warn by default when trace context is extracted by @alexmojaki in [#773](https://github.com/pydantic/logfire/pull/773)
* Don't show `urllib3` when `requests` is installed on `logfire inspect` by @Kludex in [#744](https://github.com/pydantic/logfire/pull/744)
* Add `--ignore` to `logfire inspect` by @Kludex in [#748](https://github.com/pydantic/logfire/pull/748)
* Access `model_fields` on the model class by @Viicos in [#761](https://github.com/pydantic/logfire/pull/761)
* Remove double record exception by @dmontagu in [#712](https://github.com/pydantic/logfire/pull/712)
## [v2.11.1] (2024-12-30)
* Handle errors from `sqlalchemy.inspect` by @alexmojaki in [#733](https://github.com/pydantic/logfire/pull/733)
## [v2.11.0] (2024-12-23)
* Add `capture_request_text_body` param to `instrument_httpx` by @alexmojaki in [#722](https://github.com/pydantic/logfire/pull/722)
* Support for `AnthropicBedrock` client by @stephenhibbert in [#701](https://github.com/pydantic/logfire/pull/701)
## [v2.10.0] (2024-12-23)
* Add `capture_request_form_data` param to `instrument_httpx` by @alexmojaki in [#711](https://github.com/pydantic/logfire/pull/711)
* Replace `capture_(request|response)_headers` with just `capture_headers` in `instrument_httpx` by @Kludex in [#719](https://github.com/pydantic/logfire/pull/719)
* Support SQLAlchemy `AsyncEngine` by @Kludex in [#717](https://github.com/pydantic/logfire/pull/717)
## [v2.9.0] (2024-12-20)
* Capture httpx response JSON bodies by @alexmojaki in [#700](https://github.com/pydantic/logfire/pull/700)
* Use end-at-shutdown and custom `record_exception` logic for all spans by @dmontagu in [#696](https://github.com/pydantic/logfire/pull/696)
## [v2.8.0] (2024-12-18)
* Add `capture_(request|response)_headers` ([#671](https://github.com/pydantic/logfire/pull/671)) and `capture_request_json_body` ([#682](https://github.com/pydantic/logfire/pull/682)) to `instrument_httpx` by @Kludex
* Fix patching of ProcessPoolExecutor by @alexmojaki in [#690](https://github.com/pydantic/logfire/pull/690)
* Rearrange span processors to avoid repeating scrubbing and other tweaking by @alexmojaki in [#658](https://github.com/pydantic/logfire/pull/658)
* Remove end-on-exit stuff by @dmontagu in [#676](https://github.com/pydantic/logfire/pull/676)
## [v2.7.1] (2024-12-13)
* Fix erroneous `<circular reference>` when object is repeated in list by @alexmojaki in [#664](https://github.com/pydantic/logfire/pull/664)
## [v2.7.0] (2024-12-11)
* Add `logfire.instrument_aws_lambda` by @Kludex in [#657](https://github.com/pydantic/logfire/pull/657)
## [v2.6.2] (2024-12-05)
* Update the `process.pid` resource attribute after `os.fork()` by @alexmojaki in [#647](https://github.com/pydantic/logfire/pull/647)
* Check for `os.register_at_fork` before calling by @alexmojaki in [#648](https://github.com/pydantic/logfire/pull/648)
## [v2.6.1] (2024-12-05)
* Use `exc_info` in structlog processor by @alexmojaki in [#641](https://github.com/pydantic/logfire/pull/641)
* Re-seed random ID generator after `os.fork()` by @alexmojaki in [#644](https://github.com/pydantic/logfire/pull/644)
## [v2.6.0] (2024-12-02)
* Add `instrument_sqlite3` by @Kludex in [#634](https://github.com/pydantic/logfire/pull/634)
## [v2.5.0] (2024-11-27)
* Add `logfire.suppress_scopes` method by @alexmojaki in [#628](https://github.com/pydantic/logfire/pull/628)
* Replace `ModuleNotFoundError` by `ImportError` by @Kludex in [#622](https://github.com/pydantic/logfire/pull/622)
## [v2.4.1] (2024-11-21)
* Allow new context argument of metric instrument methods to be passed positionally by @alexmojaki in [#616](https://github.com/pydantic/logfire/pull/616)
## [v2.4.0] (2024-11-20)
* Support `logfire.instrument` without arguments by @Kludex in [#607](https://github.com/pydantic/logfire/pull/607)
* Handle internal errors in `create_json_schema` by @alexmojaki in [#613](https://github.com/pydantic/logfire/pull/613)
* Handle errors in auto-tracing better by @alexmojaki in [#610](https://github.com/pydantic/logfire/pull/610)
## [v2.3.0] (2024-11-14)
* Respect repr on fields when logging a dataclass by @dmontagu in [#592](https://github.com/pydantic/logfire/pull/592)
* Allow `extract_args` to be an iterable of argument names by @alexmojaki in [#570](https://github.com/pydantic/logfire/pull/570)
* Make metric instrument methods compatible with older OTel versions by @alexmojaki in [#600](https://github.com/pydantic/logfire/pull/600)
* Add span links by @Kludex in [#587](https://github.com/pydantic/logfire/pull/587)
## [v2.2.1] (2024-11-13)
* Ignore trivial/empty functions in auto-tracing by @alexmojaki in [#596](https://github.com/pydantic/logfire/pull/596)
* Handle missing attributes in `_custom_object_schema` by @alexmojaki in [#597](https://github.com/pydantic/logfire/pull/597)
* Let user know what they should install for integrations by @Kludex in [#593](https://github.com/pydantic/logfire/pull/593)
## [v2.2.0] (2024-11-13)
* Allow instrumenting a single httpx client by @alexmojaki in [#575](https://github.com/pydantic/logfire/pull/575)
* Log LLM tool call for streamed response by @jackmpcollins in [#545](https://github.com/pydantic/logfire/pull/545)
## [v2.1.2] (2024-11-04)
* Check `.logfire` for creds to respect `'if-token-present'` setting by @sydney-runkle in [#561](https://github.com/pydantic/logfire/pull/561)
## [v2.1.1] (2024-10-31)
* Use `functools.wraps` in `@logfire.instrument` by @alexmojaki in [#562](https://github.com/pydantic/logfire/pull/562)
* Set `logfire.code.work_dir` resource attribute whenever other code source attributes are present by @alexmojaki in [#563](https://github.com/pydantic/logfire/pull/563)
* Don't scrub `logfire.logger_name` by @alexmojaki in [#564](https://github.com/pydantic/logfire/pull/564)
## [v2.1.0] (2024-10-30)
* Add ASGI & WSGI instrument methods by @Kludex in [#324](https://github.com/pydantic/logfire/pull/324)
* Add `logfire.work_dir` resource attribute by @Kludex in [#532](https://github.com/pydantic/logfire/pull/532)
* Add `logfire.configure(environment=...)` by @Kludex in [#557](https://github.com/pydantic/logfire/pull/557)
* Show message from API backend when checking token fails by @alexmojaki in [#559](https://github.com/pydantic/logfire/pull/559)
## [v2.0.0] (2024-10-30)
* `@logfire.instrument()` no longer needs source code by @alexmojaki in [#543](https://github.com/pydantic/logfire/pull/543). **BREAKING CHANGES** caused by this:
* Functions decorated with `@logfire.instrument()` and functions nested within them can now be auto-traced unlike before. Use `@logfire.no_auto_trace` anywhere on functions you want to exclude, especially the instrumented function.
* Decorated async generator functions won't support the `.asend` method properly - the generator will only receive `None`. But `instrument` shouldn't be used on generators anyway unless the generator is being used as a context manager, so new warnings about this have been added. See https://logfire.pydantic.dev/docs/guides/advanced/generators/#using-logfireinstrument
## [v1.3.2] (2024-10-29)
* Handle NonRecordingSpans for fastapi arguments by @alexmojaki in [#551](https://github.com/pydantic/logfire/pull/551)
* Preserve docstrings in auto-tracing by @alexmojaki in [#550](https://github.com/pydantic/logfire/pull/550)
## [v1.3.1] (2024-10-28)
* Handle null fastapi route.name and route.operation_id by @alexmojaki in [#547](https://github.com/pydantic/logfire/pull/547)
## [v1.3.0] (2024-10-24)
* Add Code Source links by @Kludex in [#451](https://github.com/pydantic/logfire/pull/451) and [#505](https://github.com/pydantic/logfire/pull/505)
* Add fastapi arguments attributes directly on the root OTel span, remove `use_opentelemetry_instrumentation` kwarg by @alexmojaki in [#509](https://github.com/pydantic/logfire/pull/509)
* Allow setting tags on logfire spans by @AdolfoVillalobos in [#497](https://github.com/pydantic/logfire/pull/497)
* Add logger name to `LogfireLoggingHandler` spans by @samuelcolvin in [#534](https://github.com/pydantic/logfire/pull/534)
* Format `None` as `None` instead of `null` in messages by @alexmojaki in [#525](https://github.com/pydantic/logfire/pull/525)
* Use `PYTEST_VERSION` instead of `PYTEST_CURRENT_TEST` to detect `logfire.configure()` being called within a pytest run but outside any test by @Kludex in [#531](https://github.com/pydantic/logfire/pull/531)
## [v1.2.0] (2024-10-17)
* Add `local` parameter to `logfire.configure()` by @alexmojaki in [#508](https://github.com/pydantic/logfire/pull/508)
## [v1.1.0] (2024-10-14)
* Fix error in checking for generators in auto-tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/498
* Support `'if-token-present'` for env var `'LOGFIRE_SEND_TO_LOGFIRE'` by @sydney-runkle in https://github.com/pydantic/logfire/pull/488
* Use `Compression.Gzip` by @Kludex in https://github.com/pydantic/logfire/pull/491
## [v1.0.1] (2024-10-02)
* Fix warning about unregistered MetricReaders by @alexmojaki in https://github.com/pydantic/logfire/pull/465
## [v1.0.0] (2024-09-30)
* Upgrade `DeprecationWarning`s to `UserWarning`s by @alexmojaki in https://github.com/pydantic/logfire/pull/458
* Update query client APIs by @dmontagu in https://github.com/pydantic/logfire/pull/454
## [v0.55.0] (2024-09-27)
* Replace `pydantic_plugin` in `logfire.configure()` with `logfire.instrument_pydantic()` by @alexmojaki in https://github.com/pydantic/logfire/pull/453
* Keep `METRICS_PREFERRED_TEMPORALITY` private by @alexmojaki in https://github.com/pydantic/logfire/pull/456
* Use `SeededRandomIdGenerator` by default to prevent interference from `random.seed` by @alexmojaki in https://github.com/pydantic/logfire/pull/457
## [v0.54.0] (2024-09-26)
* **Changes in `logfire.configure()`:**
* Remove `show_summary` and `fast_shutdown` by @alexmojaki in https://github.com/pydantic/logfire/pull/431
* Move `base_url`, `id_generator`, and `ns_timestamp_generator` parameters into `advanced: AdvancedOptions` by @alexmojaki in https://github.com/pydantic/logfire/pull/432
* Add `metrics` parameter by @alexmojaki in https://github.com/pydantic/logfire/pull/444
* Remove default `min_duration` for `install_auto_tracing` by @alexmojaki in https://github.com/pydantic/logfire/pull/446
## [v0.53.0] (2024-09-17)
* Tail sampling by @alexmojaki in https://github.com/pydantic/logfire/pull/407
* Use OTEL scopes better, especially instead of tags by @alexmojaki in https://github.com/pydantic/logfire/pull/420
* Deprecate `project_name` in `logfire.configure()`, remove old kwargs from signature by @alexmojaki in https://github.com/pydantic/logfire/pull/428
* Fix websocket span messages by @alexmojaki in https://github.com/pydantic/logfire/pull/426
* Remove warning about attribute/variable name conflicts in f-string magic by @alexmojaki in https://github.com/pydantic/logfire/pull/418
## [v0.52.0] (2024-09-05)
* Handle FastAPI update with SolvedDependencies by @alexmojaki in https://github.com/pydantic/logfire/pull/415
* Add experimental client for the Logfire Query API by @dmontagu in https://github.com/pydantic/logfire/pull/405
* Remove `default_span_processor` parameter from `configure` by @alexmojaki in https://github.com/pydantic/logfire/pull/400
* Remove `custom_scope_suffix` parameter of `Logfire.log` by @alexmojaki in https://github.com/pydantic/logfire/pull/399
* Add missing `service_version` field to `_LogfireConfigData` so that it gets copied into subprocesses by @alexmojaki in https://github.com/pydantic/logfire/pull/401
## [v0.51.0] (2024-08-22)
### BREAKING CHANGES
* **System metrics are no longer collected by default** when the correct dependency is installed. Use [`logfire.instrument_system_metrics()`](https://logfire.pydantic.dev/docs/integrations/system-metrics/) to enable system metrics collection. **If you are simply using the old 'Basic System Metrics' dashboard, then no further code changes are required, but that dashboard will no longer work properly and you should create a new dashboard from the template named 'Basic System Metrics (Logfire)'**. If you were using other collected metrics, see the documentation for how to collect those. By @alexmojaki in https://github.com/pydantic/logfire/pull/373
* Stop collecting package versions by @alexmojaki in https://github.com/pydantic/logfire/pull/387
* Don't auto-trace generators by @alexmojaki in https://github.com/pydantic/logfire/pull/386
* Disable ASGI send/receive spans by default by @alexmojaki in https://github.com/pydantic/logfire/pull/371
### Other fixes
* Add py.typed file to logfire-api by @jackmpcollins in https://github.com/pydantic/logfire/pull/379
* Check `LambdaRuntimeClient` before logging tracebacks in `_ensure_flush_after_aws_lambda` by @alexmojaki in https://github.com/pydantic/logfire/pull/388
## [v0.50.1] (2024-08-06)
(Previously released as `v0.50.0`, then yanked due to https://github.com/pydantic/logfire/issues/367)
* **BREAKING CHANGES:** Separate sending to Logfire from using standard OTEL environment variables by @alexmojaki in https://github.com/pydantic/logfire/pull/351. See https://logfire.pydantic.dev/docs/guides/advanced/alternative_backends/ for details. Highlights:
* `OTEL_EXPORTER_OTLP_ENDPOINT` is no longer just an alternative to `LOGFIRE_BASE_URL`. Setting `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`, and/or `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` will set up appropriate exporters *in addition* to sending to Logfire, which must be turned off separately if desired. These are basic exporters relying on OTEL defaults. In particular they don't use our custom retrying logic.
* `LOGFIRE_BASE_URL` / `logfire.configure(base_url=...)` is now only intended for actual alternative Logfire backends, which are currently only available to Logfire developers, and unlike `OTEL_EXPORTER_OTLP_ENDPOINT` requires authenticating with Logfire.
* Pending spans are only sent to logfire-specific exporters.
* Add `capture_statement` to Redis instrumentation by @Kludex in https://github.com/pydantic/logfire/pull/355
## [v0.49.1] (2024-08-05)
* Add missing return on instrument methods by @Kludex in https://github.com/pydantic/logfire/pull/360
* Add `logfire.exception()` to `logfire-api` by @Kludex in https://github.com/pydantic/logfire/pull/358
* Remove `TypeAlias` from code source by @Kludex in https://github.com/pydantic/logfire/pull/359
* Turn `ParamSpec` non-private by @Kludex in https://github.com/pydantic/logfire/pull/361
## [v0.49.0] (2024-08-05)
* Add `logfire.instrument_mysql()` by @aditkumar72 in https://github.com/pydantic/logfire/pull/341
* Set OTEL status description when logging exceptions by @alexmojaki in https://github.com/pydantic/logfire/pull/348
* Switch UpDownCounters to cumulative aggregation temporality by @alexmojaki in https://github.com/pydantic/logfire/pull/347
* Log more info about internal errors by @alexmojaki in https://github.com/pydantic/logfire/pull/346
## [v0.48.1] (2024-07-29)
* Handle newer opentelemetry versions by @alexmojaki in https://github.com/pydantic/logfire/pull/337
* More lenient handling of loguru message mismatch and better warnings by @alexmojaki in https://github.com/pydantic/logfire/pull/338
* Add better type hints for HTTPX and AsyncPG by @Kludex in https://github.com/pydantic/logfire/pull/342
* Handle `setuptools` changing `sys.path` for importing `packaging.version` by @alexmojaki in https://github.com/pydantic/logfire/pull/344
## [v0.48.0] (2024-07-24)
* Add `instrument_celery` method by @Kludex in https://github.com/pydantic/logfire/pull/322
* `capture_headers` by @alexmojaki in https://github.com/pydantic/logfire/pull/318
* Handle message formatting errors by @alexmojaki in https://github.com/pydantic/logfire/pull/329
* Handle logging `None` with `loguru` by @alexmojaki in https://github.com/pydantic/logfire/pull/331
## [v0.47.0] (2024-07-20)
* Fix recursive logging from OTEL's `BatchSpanProcessor` by @alexmojaki in https://github.com/pydantic/logfire/pull/306
* Set sqlalchemy 'connect' spans to debug level by @alexmojaki in https://github.com/pydantic/logfire/pull/307
* Add type hints to instrument methods by @Kludex in https://github.com/pydantic/logfire/pull/320
* Handle older versions of anthropic by @alexmojaki in https://github.com/pydantic/logfire/pull/316
* Update dependencies, handle change in importlib by @alexmojaki in https://github.com/pydantic/logfire/pull/323
* Summarize db.statement in message by @alexmojaki in https://github.com/pydantic/logfire/pull/308
* Handle and test other OpenAI/Anthropic client methods by @alexmojaki in https://github.com/pydantic/logfire/pull/312
## [v0.46.1] (2024-07-05)
* Fix release process for `logfire-api` by @Kludex in https://github.com/pydantic/logfire/pull/303
## [v0.46.0] (2024-07-05)
* Add `logfire-api` by @Kludex in https://github.com/pydantic/logfire/pull/268
* Use exponential histogram buckets by @alexmojaki in https://github.com/pydantic/logfire/pull/282
* Add attribute noting details of scrubbed values by @alexmojaki in https://github.com/pydantic/logfire/pull/278
* Ensure `force_flush` at end of AWS Lambda invocation by @alexmojaki in https://github.com/pydantic/logfire/pull/296
## [v0.45.1] (2024-07-01)
* Fix ignore no config warning message by @ba1mn in https://github.com/pydantic/logfire/pull/292
* Ensure `StaticFiles` doesn't break `instrument_fastapi` by @alexmojaki in https://github.com/pydantic/logfire/pull/294
## [v0.45.0] (2024-06-29)
* Add `scrubbing: ScrubbingOptions | False` parameter to `logfire.configure`, replacing `scrubbing_patterns` and `scrubbing_callback` by @alexmojaki in https://github.com/pydantic/logfire/pull/283
* Fix and test unmapped SQLModels by @alexmojaki in https://github.com/pydantic/logfire/pull/286
* Optimize `collect_package_info` by @alexmojaki in https://github.com/pydantic/logfire/pull/285
## [v0.44.0] (2024-06-26)
* Prevent 'dictionary changed size during iteration' error in `install_auto_tracing` by @alexmojaki in https://github.com/pydantic/logfire/pull/277
* `suppress_instrumentation` when retrying exports by @alexmojaki in https://github.com/pydantic/logfire/pull/279
* Log async stack in `log_slow_async_callbacks` by @alexmojaki in https://github.com/pydantic/logfire/pull/280
## [v0.43.0] (2024-06-24)
* **BREAKING CHANGE**: Remove default for `modules` parameter of `install_auto_tracing` by @alexmojaki in https://github.com/pydantic/logfire/pull/261
* **BREAKING CHANGE**: Check if logfire token is valid in separate thread, so `logfire.configure` won't block startup and will no longer raise an exception for an invalid token, by @alexmojaki in https://github.com/pydantic/logfire/pull/274
* Remove `logfire_api_session` parameter from `logfire.configure` by @alexmojaki in https://github.com/pydantic/logfire/pull/272
* Default the log level to error if the status code is error, and vice versa by @alexmojaki in https://github.com/pydantic/logfire/pull/269
* Avoid importing `gitpython` by @alexmojaki in https://github.com/pydantic/logfire/pull/260
* Only delete files on `logfire clean` by @Kludex in https://github.com/pydantic/logfire/pull/267
* Bug fix: Logging arguments of a request to a FastAPI sub app by @sneakyPad in https://github.com/pydantic/logfire/pull/259
* Fix query params not being in message by @alexmojaki in https://github.com/pydantic/logfire/pull/271
* Replace 'Redacted' with 'Scrubbed' in 'Redacted due to...' by @alexmojaki in https://github.com/pydantic/logfire/pull/273
## [v0.42.0] (2024-06-11)
* Improved handling of request errors when exporting by @alexmojaki in https://github.com/pydantic/logfire/pull/252
* `ignore_no_config` setting added to `pyproject.toml` by @deepakdinesh1123 in https://github.com/pydantic/logfire/pull/254
* Make `logfire whoami` respect the `LOGFIRE_TOKEN` env var by @alexmojaki in https://github.com/pydantic/logfire/pull/256
## [v0.41.0] (2024-06-06)
* Fix backfill command by @alexmojaki in https://github.com/pydantic/logfire/pull/243
* Update Anthropic to use tools that are no longer in beta by @willbakst in https://github.com/pydantic/logfire/pull/249
- Anthropic instrumentation now requires `anthropic>=0.27.0`
## [v0.40.0] (2024-06-04)
* **BREAKING CHANGE:** The `processors` parameter of `logfire.configure()` has been replaced by `additional_span_processors`. Passing `processors` will raise an error. Unlike `processors`, setting `additional_span_processors` to an empty sequence will not disable the default span processor which exports to Logfire. To do that, pass `send_to_logfire=False`. Similarly `metric_readers` has been replaced by `additional_metric_reader`. By @alexmojaki in https://github.com/pydantic/logfire/pull/233
* Improve error raised when opentelemetry.instrumentation.django is not installed by @deepakdinesh1123 in https://github.com/pydantic/logfire/pull/231
* Handle internal errors by @alexmojaki in https://github.com/pydantic/logfire/pull/232
## [v0.39.0] (2024-06-03)
Add new methods for easier integration in https://github.com/pydantic/logfire/pull/207:
* `instrument_flask`
* `instrument_starlette`
* `instrument_aiohttp_client`
* `instrument_sqlalchemy`
* `instrument_pymongo`
* `instrument_redis`
## [v0.38.0] (2024-05-31)
**BREAKING CHANGE**: Calling `logfire.info`, `logfire.error`, `logfire.span` etc. will no longer automatically configure logfire if it hasn't been configured already. Instead it will emit a warning and not log anything.
Users must call `logfire.configure()` before they want logging to actually start, even if they don't pass any arguments to `configure` and all configuration is done by environment variables.
Using integrations like `logfire.instrument_fastapi()` before calling `configure` will also emit a warning but it will still set up the instrumentation, although it will not log anything until `configure` is called.
## [v0.37.0] (2024-05-29)
* Add `logfire.suppress_instrumentation` context manager, silence `urllib3` debug logs from exporting by @jlondonobo in https://github.com/pydantic/logfire/pull/197
## [v0.36.1] (2024-05-27)
* Fix structlog import by @alexmojaki in https://github.com/pydantic/logfire/pull/217
## [v0.36.0] (2024-05-27)
* Allow passing OTEL kwargs through instrument_fastapi by @alexmojaki in https://github.com/pydantic/logfire/pull/205
* Retry connection errors by @alexmojaki in https://github.com/pydantic/logfire/pull/214
## [v0.35.0] (2024-05-21)
* Add `logfire.instrument_requests()` by @tlpinney in https://github.com/pydantic/logfire/pull/196
* Add `logfire.instrument_httpx()` by @tlpinney in https://github.com/pydantic/logfire/pull/198
* Add `logfire.instrument_django()` by @inspirsmith in https://github.com/pydantic/logfire/pull/200
## [v0.34.0] (2024-05-21)
* Allow instrumenting OpenAI/Anthropic client classes or modules by @alexmojaki in https://github.com/pydantic/logfire/pull/191
## [v0.33.0] (2024-05-18)
* Fix logging integrations with non-string messages by @alexmojaki in https://github.com/pydantic/logfire/pull/179
* Anthropic instrumentation by @willbakst in https://github.com/pydantic/logfire/pull/181
## [v0.32.1] (2024-05-15)
* Add 'executing' version to 'logfire info' output by @alexmojaki in https://github.com/pydantic/logfire/pull/180
* Don't use `include_url` with Pydantic's V1 `ValidationError` by @Kludex in https://github.com/pydantic/logfire/pull/184
## [v0.32.0] (2024-05-14)
* Don't scrub spans from OpenAI integration by @alexmojaki in https://github.com/pydantic/logfire/pull/173
* Convert FastAPI arguments log to span, don't set to debug by default by @alexmojaki in https://github.com/pydantic/logfire/pull/164
* Raise an exception when Pydantic plugin is enabled on Pydantic <2.5.0 by @bossenti in https://github.com/pydantic/logfire/pull/160
* Do not require project name on `logfire projects use` command by @Kludex in https://github.com/pydantic/logfire/pull/177
## [v0.31.0] (2024-05-13)
* Improve error when `opentelemetry-instrumentation-fastapi` is missing by @Kludex in https://github.com/pydantic/logfire/pull/143
* Set `send_to_logfire` to `False` when running under Pytest by @Kludex in https://github.com/pydantic/logfire/pull/154
* Add `logfire.metric_gauge()` by @Kludex in https://github.com/pydantic/logfire/pull/153
* Use `stack_info` instead of `stack_offset` by @Kludex in https://github.com/pydantic/logfire/pull/137
* Fix JSON encoding/schema of pydantic v1 models by @alexmojaki in https://github.com/pydantic/logfire/pull/163
* Handle intermediate logging/loguru levels by @alexmojaki in https://github.com/pydantic/logfire/pull/162
* Add exception on console by @Kludex in https://github.com/pydantic/logfire/pull/168
* f-string magic by @alexmojaki in https://github.com/pydantic/logfire/pull/151
## [v0.30.0] (2024-05-06)
* Close spans when process shuts down before the exporter shuts down and drops them by @alexmojaki in https://github.com/pydantic/logfire/pull/108
* add `psycopg` in OTEL_PACKAGES and optional-dependencies by @Elkiwa in https://github.com/pydantic/logfire/pull/115
* [PYD-877] Log OpenAI streaming response at the end instead of opening a span and attaching context in a generator that may not finish by @alexmojaki in https://github.com/pydantic/logfire/pull/107
* Increase minimum typing-extensions version by @Kludex in https://github.com/pydantic/logfire/pull/129
* Add note about creating write tokens when user is not authenticated by @Kludex in https://github.com/pydantic/logfire/pull/127
* Make pip install command printed by 'logfire inspect' easy to copy by @alexmojaki in https://github.com/pydantic/logfire/pull/130
## [v0.29.0] (2024-05-03)
* Add log level on `on_start` for ASGI send and receive messages by @Kludex in https://github.com/pydantic/logfire/pull/94
* Support a dataclass type as an argument by @dmontagu in https://github.com/pydantic/logfire/pull/100
* Add min_log_level to console options by @Kludex in https://github.com/pydantic/logfire/pull/95
* Improve the OpenAI integration by @Kludex in https://github.com/pydantic/logfire/pull/104
## [v0.28.3] (2024-05-02)
* Fix pydantic plugin for cloudpickle by @alexmojaki in https://github.com/pydantic/logfire/pull/86
* Handle unloaded SQLAlchemy fields in JSON schema by @alexmojaki in https://github.com/pydantic/logfire/pull/92
## [v0.28.2] (2024-05-02)
* Fix OpenAI streaming empty chunk error by @hramezani in https://github.com/pydantic/logfire/pull/69
* Update pyproject.toml to include logfire in sdist build target by @syniex in https://github.com/pydantic/logfire/pull/51
* Recommend `opentelemetry-instrumentation-sklearn` on `scikit-learn` instead of `sklearn` by @Kludex in https://github.com/pydantic/logfire/pull/75
## [v0.28.1] (2024-05-01)
* Don't scrub 'author' by @alexmojaki in https://github.com/pydantic/logfire/pull/55
* Check if object is SQLAlchemy before dataclass by @Kludex in https://github.com/pydantic/logfire/pull/67
## [v0.28.0] (2024-04-30)
* Add `logfire.instrument_asyncpg()` by @alexmojaki in https://github.com/pydantic/logfire/pull/44
## [v0.27.0] (2024-04-30)
First release from new repo!
* Update README by @Kludex in https://github.com/pydantic/logfire/pull/2
* Add linter & pipeline by @Kludex in https://github.com/pydantic/logfire/pull/1
* Use Python 3.8 for pipeline by @Kludex in https://github.com/pydantic/logfire/pull/3
* Use Rye instead of Poetry by @Kludex in https://github.com/pydantic/logfire/pull/5
* Add test suite by @Kludex in https://github.com/pydantic/logfire/pull/6
* Add custom PyPI by @Kludex in https://github.com/pydantic/logfire/pull/7
* Add release job by @Kludex in https://github.com/pydantic/logfire/pull/8
* Install rye on release job by @Kludex in https://github.com/pydantic/logfire/pull/9
* Add latest monorepo changes by @Kludex in https://github.com/pydantic/logfire/pull/10
* Add Python 3.12 to CI by @hramezani in https://github.com/pydantic/logfire/pull/11
* improve readme and related faff by @samuelcolvin in https://github.com/pydantic/logfire/pull/12
* CF pages docs build by @samuelcolvin in https://github.com/pydantic/logfire/pull/14
* Create alert docs by @Kludex in https://github.com/pydantic/logfire/pull/15
* improve the readme and contributing guide by @samuelcolvin in https://github.com/pydantic/logfire/pull/16
* Add classifiers by @hramezani in https://github.com/pydantic/logfire/pull/17
* tell rye to use uv by @samuelcolvin in https://github.com/pydantic/logfire/pull/19
* Adding docs for `instrument_openai` by @samuelcolvin in https://github.com/pydantic/logfire/pull/18
* Live view docs by @samuelcolvin in https://github.com/pydantic/logfire/pull/20
* Add `logfire info` and issue templates by @samuelcolvin in https://github.com/pydantic/logfire/pull/22
* Add GitHub discussions to help page, remove "login", show source link by @samuelcolvin in https://github.com/pydantic/logfire/pull/23
* setup coverage by @samuelcolvin in https://github.com/pydantic/logfire/pull/24
* improve coverage by @samuelcolvin in https://github.com/pydantic/logfire/pull/25
* Write token docs (#2244) by @Kludex in https://github.com/pydantic/logfire/pull/27
* add direct connect docs by @davidhewitt in https://github.com/pydantic/logfire/pull/26
* Add dashboard docs by @Kludex in https://github.com/pydantic/logfire/pull/28
* Add SQL Explore docs by @Kludex in https://github.com/pydantic/logfire/pull/29
* Make the `psycopg2` docs runnable as is by @Kludex in https://github.com/pydantic/logfire/pull/31
* Add Rye to installation by @Kludex in https://github.com/pydantic/logfire/pull/33
* Apply Logfire brand colors by @Kludex in https://github.com/pydantic/logfire/pull/32
* `logfire.instrument_psycopg()` function by @alexmojaki in https://github.com/pydantic/logfire/pull/30
* Handle recursive logging from OTEL by @alexmojaki in https://github.com/pydantic/logfire/pull/35
* Improve MongoDB docs by @Kludex in https://github.com/pydantic/logfire/pull/34
* Improve colors by @dmontagu in https://github.com/pydantic/logfire/pull/38
* Rename files to not have numeric prefixes by @dmontagu in https://github.com/pydantic/logfire/pull/39
* Handle cyclic references in JSON encoding and schema by @alexmojaki in https://github.com/pydantic/logfire/pull/37
* Ensure `logfire.testing` doesn't depend on pydantic and eval_type_backport by @alexmojaki in https://github.com/pydantic/logfire/pull/40
* Allow using pydantic plugin with models defined before calling logfire.configure by @alexmojaki in https://github.com/pydantic/logfire/pull/36
[v0.27.0]: https://github.com/pydantic/logfire/commits/v0.27.0
[v0.28.0]: https://github.com/pydantic/logfire/compare/v0.27.0...v0.28.0
[v0.28.1]: https://github.com/pydantic/logfire/compare/v0.28.0...v0.28.1
[v0.28.2]: https://github.com/pydantic/logfire/compare/v0.28.1...v0.28.2
[v0.28.3]: https://github.com/pydantic/logfire/compare/v0.28.2...v0.28.3
[v0.29.0]: https://github.com/pydantic/logfire/compare/v0.28.3...v0.29.0
[v0.30.0]: https://github.com/pydantic/logfire/compare/v0.29.0...v0.30.0
[v0.31.0]: https://github.com/pydantic/logfire/compare/v0.30.0...v0.31.0
[v0.32.0]: https://github.com/pydantic/logfire/compare/v0.31.0...v0.32.0
[v0.32.1]: https://github.com/pydantic/logfire/compare/v0.32.0...v0.32.1
[v0.33.0]: https://github.com/pydantic/logfire/compare/v0.32.1...v0.33.0
[v0.34.0]: https://github.com/pydantic/logfire/compare/v0.33.0...v0.34.0
[v0.35.0]: https://github.com/pydantic/logfire/compare/v0.34.0...v0.35.0
[v0.36.0]: https://github.com/pydantic/logfire/compare/v0.35.0...v0.36.0
[v0.36.1]: https://github.com/pydantic/logfire/compare/v0.36.0...v0.36.1
[v0.37.0]: https://github.com/pydantic/logfire/compare/v0.36.1...v0.37.0
[v0.38.0]: https://github.com/pydantic/logfire/compare/v0.37.0...v0.38.0
[v0.39.0]: https://github.com/pydantic/logfire/compare/v0.38.0...v0.39.0
[v0.40.0]: https://github.com/pydantic/logfire/compare/v0.39.0...v0.40.0
[v0.41.0]: https://github.com/pydantic/logfire/compare/v0.40.0...v0.41.0
[v0.42.0]: https://github.com/pydantic/logfire/compare/v0.41.0...v0.42.0
[v0.43.0]: https://github.com/pydantic/logfire/compare/v0.42.0...v0.43.0
[v0.44.0]: https://github.com/pydantic/logfire/compare/v0.43.0...v0.44.0
[v0.45.0]: https://github.com/pydantic/logfire/compare/v0.44.0...v0.45.0
[v0.45.1]: https://github.com/pydantic/logfire/compare/v0.45.0...v0.45.1
[v0.46.0]: https://github.com/pydantic/logfire/compare/v0.45.1...v0.46.0
[v0.46.1]: https://github.com/pydantic/logfire/compare/v0.46.0...v0.46.1
[v0.47.0]: https://github.com/pydantic/logfire/compare/v0.46.1...v0.47.0
[v0.48.0]: https://github.com/pydantic/logfire/compare/v0.47.0...v0.48.0
[v0.48.1]: https://github.com/pydantic/logfire/compare/v0.48.0...v0.48.1
[v0.49.0]: https://github.com/pydantic/logfire/compare/v0.48.1...v0.49.0
[v0.49.1]: https://github.com/pydantic/logfire/compare/v0.49.0...v0.49.1
[v0.50.0]: https://github.com/pydantic/logfire/compare/v0.49.1...v0.50.0
[v0.50.1]: https://github.com/pydantic/logfire/compare/v0.50.0...v0.50.1
[v0.51.0]: https://github.com/pydantic/logfire/compare/v0.50.1...v0.51.0
[v0.52.0]: https://github.com/pydantic/logfire/compare/v0.51.0...v0.52.0
[v0.53.0]: https://github.com/pydantic/logfire/compare/v0.52.0...v0.53.0
[v0.54.0]: https://github.com/pydantic/logfire/compare/v0.53.0...v0.54.0
[v0.55.0]: https://github.com/pydantic/logfire/compare/v0.54.0...v0.55.0
[v1.0.0]: https://github.com/pydantic/logfire/compare/v0.55.0...v1.0.0
[v1.0.1]: https://github.com/pydantic/logfire/compare/v1.0.0...v1.0.1
[v1.1.0]: https://github.com/pydantic/logfire/compare/v1.0.1...v1.1.0
[v1.2.0]: https://github.com/pydantic/logfire/compare/v1.1.0...v1.2.0
[v1.3.0]: https://github.com/pydantic/logfire/compare/v1.2.0...v1.3.0
[v1.3.1]: https://github.com/pydantic/logfire/compare/v1.3.0...v1.3.1
[v1.3.2]: https://github.com/pydantic/logfire/compare/v1.3.1...v1.3.2
[v2.0.0]: https://github.com/pydantic/logfire/compare/v1.3.2...v2.0.0
[v2.1.0]: https://github.com/pydantic/logfire/compare/v2.0.0...v2.1.0
[v2.1.1]: https://github.com/pydantic/logfire/compare/v2.1.0...v2.1.1
[v2.1.2]: https://github.com/pydantic/logfire/compare/v2.1.1...v2.1.2
[v2.2.0]: https://github.com/pydantic/logfire/compare/v2.1.2...v2.2.0
[v2.2.1]: https://github.com/pydantic/logfire/compare/v2.2.0...v2.2.1
[v2.3.0]: https://github.com/pydantic/logfire/compare/v2.2.1...v2.3.0
[v2.4.0]: https://github.com/pydantic/logfire/compare/v2.3.0...v2.4.0
[v2.4.1]: https://github.com/pydantic/logfire/compare/v2.4.0...v2.4.1
[v2.5.0]: https://github.com/pydantic/logfire/compare/v2.4.1...v2.5.0
[v2.6.0]: https://github.com/pydantic/logfire/compare/v2.5.0...v2.6.0
[v2.6.1]: https://github.com/pydantic/logfire/compare/v2.6.0...v2.6.1
[v2.6.2]: https://github.com/pydantic/logfire/compare/v2.6.1...v2.6.2
[v2.7.0]: https://github.com/pydantic/logfire/compare/v2.6.2...v2.7.0
[v2.7.1]: https://github.com/pydantic/logfire/compare/v2.7.0...v2.7.1
[v2.8.0]: https://github.com/pydantic/logfire/compare/v2.7.1...v2.8.0
[v2.9.0]: https://github.com/pydantic/logfire/compare/v2.8.0...v2.9.0
[v2.10.0]: https://github.com/pydantic/logfire/compare/v2.9.0...v2.10.0
[v2.11.0]: https://github.com/pydantic/logfire/compare/v2.10.0...v2.11.0
[v2.11.1]: https://github.com/pydantic/logfire/compare/v2.11.0...v2.11.1
[v3.0.0]: https://github.com/pydantic/logfire/compare/v2.11.1...v3.0.0
[v3.1.0]: https://github.com/pydantic/logfire/compare/v3.0.0...v3.1.0
[v3.1.1]: https://github.com/pydantic/logfire/compare/v3.1.0...v3.1.1
[v3.2.0]: https://github.com/pydantic/logfire/compare/v3.1.1...v3.2.0
[v3.3.0]: https://github.com/pydantic/logfire/compare/v3.2.0...v3.3.0
[v3.4.0]: https://github.com/pydantic/logfire/compare/v3.3.0...v3.4.0
[v3.5.0]: https://github.com/pydantic/logfire/compare/v3.4.0...v3.5.0
[v3.5.1]: https://github.com/pydantic/logfire/compare/v3.5.0...v3.5.1
[v3.5.2]: https://github.com/pydantic/logfire/compare/v3.5.1...v3.5.2
[v3.5.3]: https://github.com/pydantic/logfire/compare/v3.5.2...v3.5.3
[v3.6.0]: https://github.com/pydantic/logfire/compare/v3.5.3...v3.6.0
[v3.6.1]: https://github.com/pydantic/logfire/compare/v3.6.0...v3.6.1
[v3.6.2]: https://github.com/pydantic/logfire/compare/v3.6.1...v3.6.2
[v3.6.3]: https://github.com/pydantic/logfire/compare/v3.6.2...v3.6.3
[v3.6.4]: https://github.com/pydantic/logfire/compare/v3.6.3...v3.6.4
[v3.7.0]: https://github.com/pydantic/logfire/compare/v3.6.4...v3.7.0
[v3.7.1]: https://github.com/pydantic/logfire/compare/v3.7.0...v3.7.1
[v3.8.0]: https://github.com/pydantic/logfire/compare/v3.7.1...v3.8.0
[v3.8.1]: https://github.com/pydantic/logfire/compare/v3.8.0...v3.8.1
[v3.9.0]: https://github.com/pydantic/logfire/compare/v3.8.1...v3.9.0
[v3.9.1]: https://github.com/pydantic/logfire/compare/v3.9.0...v3.9.1
[v3.10.0]: https://github.com/pydantic/logfire/compare/v3.9.1...v3.10.0
[v3.11.0]: https://github.com/pydantic/logfire/compare/v3.10.0...v3.11.0
[v3.12.0]: https://github.com/pydantic/logfire/compare/v3.11.0...v3.12.0
[v3.13.0]: https://github.com/pydantic/logfire/compare/v3.12.0...v3.13.0
[v3.13.1]: https://github.com/pydantic/logfire/compare/v3.13.0...v3.13.1
[v3.14.0]: https://github.com/pydantic/logfire/compare/v3.13.1...v3.14.0
[v3.14.1]: https://github.com/pydantic/logfire/compare/v3.14.0...v3.14.1
[v3.15.0]: https://github.com/pydantic/logfire/compare/v3.14.1...v3.15.0
[v3.15.1]: https://github.com/pydantic/logfire/compare/v3.15.0...v3.15.1
[v3.16.0]: https://github.com/pydantic/logfire/compare/v3.15.1...v3.16.0
[v3.16.1]: https://github.com/pydantic/logfire/compare/v3.16.0...v3.16.1
[v3.16.2]: https://github.com/pydantic/logfire/compare/v3.16.1...v3.16.2
[v3.17.0]: https://github.com/pydantic/logfire/compare/v3.16.2...v3.17.0
[v3.18.0]: https://github.com/pydantic/logfire/compare/v3.17.0...v3.18.0
[v3.19.0]: https://github.com/pydantic/logfire/compare/v3.18.0...v3.19.0
[v3.20.0]: https://github.com/pydantic/logfire/compare/v3.19.0...v3.20.0
[v3.21.0]: https://github.com/pydantic/logfire/compare/v3.20.0...v3.21.0
[v3.21.1]: https://github.com/pydantic/logfire/compare/v3.21.0...v3.21.1
[v3.21.2]: https://github.com/pydantic/logfire/compare/v3.21.1...v3.21.2
[v3.22.0]: https://github.com/pydantic/logfire/compare/v3.21.2...v3.22.0
[v3.22.1]: https://github.com/pydantic/logfire/compare/v3.22.0...v3.22.1
[v3.23.0]: https://github.com/pydantic/logfire/compare/v3.22.1...v3.23.0
[v3.24.0]: https://github.com/pydantic/logfire/compare/v3.23.0...v3.24.0
[v3.24.1]: https://github.com/pydantic/logfire/compare/v3.24.0...v3.24.1
[v3.24.2]: https://github.com/pydantic/logfire/compare/v3.24.1...v3.24.2
[v3.25.0]: https://github.com/pydantic/logfire/compare/v3.24.2...v3.25.0
[v4.0.0]: https://github.com/pydantic/logfire/compare/v3.25.0...v4.0.0
[v4.0.1]: https://github.com/pydantic/logfire/compare/v4.0.0...v4.0.1
[v4.1.0]: https://github.com/pydantic/logfire/compare/v4.0.1...v4.1.0
[v4.2.0]: https://github.com/pydantic/logfire/compare/v4.1.0...v4.2.0
[v4.3.0]: https://github.com/pydantic/logfire/compare/v4.2.0...v4.3.0
[v4.3.1]: https://github.com/pydantic/logfire/compare/v4.3.0...v4.3.1
[v4.3.2]: https://github.com/pydantic/logfire/compare/v4.3.1...v4.3.2
[v4.3.3]: https://github.com/pydantic/logfire/compare/v4.3.2...v4.3.3
[v4.3.4]: https://github.com/pydantic/logfire/compare/v4.3.3...v4.3.4
[v4.3.5]: https://github.com/pydantic/logfire/compare/v4.3.4...v4.3.5
[v4.3.6]: https://github.com/pydantic/logfire/compare/v4.3.5...v4.3.6
[v4.4.0]: https://github.com/pydantic/logfire/compare/v4.3.6...v4.4.0
[v4.5.0]: https://github.com/pydantic/logfire/compare/v4.4.0...v4.5.0
[v4.6.0]: https://github.com/pydantic/logfire/compare/v4.5.0...v4.6.0
[v4.7.0]: https://github.com/pydantic/logfire/compare/v4.6.0...v4.7.0
[v4.8.0]: https://github.com/pydantic/logfire/compare/v4.7.0...v4.8.0
[v4.9.0]: https://github.com/pydantic/logfire/compare/v4.8.0...v4.9.0
[v4.10.0]: https://github.com/pydantic/logfire/compare/v4.9.0...v4.10.0
[v4.11.0]: https://github.com/pydantic/logfire/compare/v4.10.0...v4.11.0
[v4.12.0]: https://github.com/pydantic/logfire/compare/v4.11.0...v4.12.0
[v4.13.0]: https://github.com/pydantic/logfire/compare/v4.12.0...v4.13.0
[v4.13.1]: https://github.com/pydantic/logfire/compare/v4.13.0...v4.13.1
[v4.13.2]: https://github.com/pydantic/logfire/compare/v4.13.1...v4.13.2
[v4.14.0]: https://github.com/pydantic/logfire/compare/v4.13.2...v4.14.0
[v4.14.1]: https://github.com/pydantic/logfire/compare/v4.14.0...v4.14.1
[v4.14.2]: https://github.com/pydantic/logfire/compare/v4.14.1...v4.14.2
[v4.15.0]: https://github.com/pydantic/logfire/compare/v4.14.2...v4.15.0
[v4.15.1]: https://github.com/pydantic/logfire/compare/v4.15.0...v4.15.1
[v4.16.0]: https://github.com/pydantic/logfire/compare/v4.15.1...v4.16.0
[v4.17.0]: https://github.com/pydantic/logfire/compare/v4.16.0...v4.17.0
[v4.18.0]: https://github.com/pydantic/logfire/compare/v4.17.0...v4.18.0
[v4.19.0]: https://github.com/pydantic/logfire/compare/v4.18.0...v4.19.0
[v4.20.0]: https://github.com/pydantic/logfire/compare/v4.19.0...v4.20.0
[v4.21.0]: https://github.com/pydantic/logfire/compare/v4.20.0...v4.21.0
[v4.22.0]: https://github.com/pydantic/logfire/compare/v4.21.0...v4.22.0
[v4.23.0]: https://github.com/pydantic/logfire/compare/v4.22.0...v4.23.0
[v4.24.0]: https://github.com/pydantic/logfire/compare/v4.23.0...v4.24.0
[v4.25.0]: https://github.com/pydantic/logfire/compare/v4.24.0...v4.25.0
[v4.26.0]: https://github.com/pydantic/logfire/compare/v4.25.0...v4.26.0
[v4.27.0]: https://github.com/pydantic/logfire/compare/v4.26.0...v4.27.0
[v4.28.0]: https://github.com/pydantic/logfire/compare/v4.27.0...v4.28.0
[v4.29.0]: https://github.com/pydantic/logfire/compare/v4.28.0...v4.29.0
[v4.30.0]: https://github.com/pydantic/logfire/compare/v4.29.0...v4.30.0
[v4.31.0]: https://github.com/pydantic/logfire/compare/v4.30.0...v4.31.0
[v4.31.1]: https://github.com/pydantic/logfire/compare/v4.31.0...v4.31.1
[v4.31.2]: https://github.com/pydantic/logfire/compare/v4.31.1...v4.31.2
[v4.32.0]: https://github.com/pydantic/logfire/compare/v4.31.2...v4.32.0
[v4.32.1]: https://github.com/pydantic/logfire/compare/v4.32.0...v4.32.1
[v4.33.0]: https://github.com/pydantic/logfire/compare/v4.32.1...v4.33.0
[v4.34.0]: https://github.com/pydantic/logfire/compare/v4.33.0...v4.34.0
[v4.35.0]: https://github.com/pydantic/logfire/compare/v4.34.0...v4.35.0
[v4.36.0]: https://github.com/pydantic/logfire/compare/v4.35.0...v4.36.0
[v4.37.0]: https://github.com/pydantic/logfire/compare/v4.36.0...v4.37.0
[v4.38.0]: https://github.com/pydantic/logfire/compare/v4.37.0...v4.38.0
[v4.39.0]: https://github.com/pydantic/logfire/compare/v4.38.0...v4.39.0
[v4.40.0]: https://github.com/pydantic/logfire/compare/v4.39.0...v4.40.0
[v4.41.0]: https://github.com/pydantic/logfire/compare/v4.40.0...v4.41.0
[v5.0.0]: https://github.com/pydantic/logfire/compare/v4.41.0...v5.0.0
[v5.1.0]: https://github.com/pydantic/logfire/compare/v5.0.0...v5.1.0
[v5.1.1]: https://github.com/pydantic/logfire/compare/v5.1.0...v5.1.1
[v5.2.0]: https://github.com/pydantic/logfire/compare/v5.1.1...v5.2.0
[v6.0.0b1]: https://github.com/pydantic/logfire/compare/v5.1.0...v6.0.0b1
[v6.0.0b2]: https://github.com/pydantic/logfire/compare/v6.0.0b1...v6.0.0b2
[v6.0.0b3]: https://github.com/pydantic/logfire/compare/v6.0.0b2...v6.0.0b3
[v6.0.0b4]: https://github.com/pydantic/logfire/compare/v6.0.0b3...v6.0.0b4
[v6.0.0b5]: https://github.com/pydantic/logfire/compare/v6.0.0b4...v6.0.0b5
[v6.0.0b6]: https://github.com/pydantic/logfire/compare/v6.0.0b5...v6.0.0b6
[v6.0.0b7]: https://github.com/pydantic/logfire/compare/v6.0.0b6...v6.0.0b7
[v6.0.0b8]: https://github.com/pydantic/logfire/compare/v6.0.0b7...v6.0.0b8
[v5.3.0]: https://github.com/pydantic/logfire/compare/v6.0.0b8...v5.3.0
[v5.4.0]: https://github.com/pydantic/logfire/compare/v5.3.0...v5.4.0
[v5.5.0]: https://github.com/pydantic/logfire/compare/v5.4.0...v5.5.0