{"id":196,"library":"logfire","title":"Logfire","description":"Observability platform from Pydantic — structured logging, tracing, and metrics built on OpenTelemetry. Current version is 4.30.0. Must call logfire.configure() before any instrumentation or spans. Requires LOGFIRE_TOKEN env var for cloud backend. The old pydantic-logfire package is a deprecated stub — use logfire directly. Pricing changed January 2026.","status":"active","version":"4.30.0","language":"python","source_language":"en","source_url":"https://logfire.pydantic.dev/docs/","tags":["observability","logging","tracing","opentelemetry","monitoring","pydantic","llm"],"install":[{"cmd":"pip install logfire","lang":"bash","label":"Core SDK"},{"cmd":"pip install logfire[fastapi]","lang":"bash","label":"With FastAPI auto-instrumentation"},{"cmd":"pip install logfire[httpx,requests,sqlalchemy,asyncpg]","lang":"bash","label":"With common integrations"},{"cmd":"pip install pydantic-logfire","lang":"bash","label":"DEPRECATED stub — installs logfire automatically"}],"dependencies":[{"reason":"Required. OpenTelemetry SDK. Installed automatically.","package":"opentelemetry-sdk>=1.39.0","optional":false},{"reason":"Required for cloud export. Installed automatically.","package":"opentelemetry-exporter-otlp-proto-http","optional":false},{"reason":"Required for source code introspection. Installed automatically.","package":"executing","optional":false}],"imports":[{"note":"logfire.configure() must be called before any logging, spans, or instrumentation. Without it, spans are created but not exported. The LOGFIRE_TOKEN env var is read automatically at configure() time.","wrong":"import logfire\n\n# Missing configure() before use — spans not exported:\nlogfire.info('This message is not exported')  # silently dropped\n\n# Old pydantic-logfire import (deprecated):\nfrom pydantic_logfire import configure  # ImportError — use import logfire","symbol":"logfire.configure","correct":"import logfire\n\n# Must call configure() FIRST — before any spans or instrumentation\n# Reads LOGFIRE_TOKEN env var automatically if set\nlogfire.configure()\n\n# Then instrument libraries\nlogfire.instrument_fastapi(app)\nlogfire.instrument_httpx()\nlogfire.instrument_sqlalchemy(engine)\n\n# Structured logging\nlogfire.info('User {user_id} logged in', user_id=123)\n\n# Manual spans\nwith logfire.span('Processing order {order_id}', order_id=order.id):\n    result = process(order)"}],"quickstart":{"code":"import logfire\nimport os\n\n# Set env var: export LOGFIRE_TOKEN='your-token'\n# Or pass directly (not recommended for production):\nlogfire.configure(\n    token=os.environ.get('LOGFIRE_TOKEN'),\n    service_name='my-service',\n    environment='production'\n)\n\n# Structured log with attributes\nlogfire.info('Processing request', user_id=42, endpoint='/api/data')\nlogfire.warning('Rate limit approaching', limit=100, current=95)\nlogfire.error('Database error', error_type='ConnectionTimeout', db='postgres')\n\n# Span (traces an operation)\nwith logfire.span('Fetch user data {user_id}', user_id=42):\n    # Code here is traced\n    data = fetch_user(42)\n    logfire.info('Fetched {record_count} records', record_count=len(data))\n\n# FastAPI integration\nfrom fastapi import FastAPI\napp = FastAPI()\nlogfire.instrument_fastapi(app)  # auto-traces all routes","lang":"python","description":"Always call logfire.configure() first. LOGFIRE_TOKEN from env. Free tier: 1 seat, 3 projects."},"warnings":[{"fix":"Call logfire.configure() at application startup, before importing or initializing any instrumented libraries. For FastAPI: call it before app = FastAPI().","message":"logfire.configure() must be called before any spans, logs, or instrument_*() calls. Omitting it causes all telemetry to be silently dropped — no error is raised.","severity":"breaking","affected_versions":"all"},{"fix":"Replace: logfire.instrument_httpx(capture_request_json_body=True) with logfire.instrument_httpx(capture_request_body=True, capture_response_body=True)","message":"instrument_httpx() parameters changed: capture_request_json_body, capture_request_text_body, capture_request_form_data, and capture_response_json_body were removed and replaced by capture_request_body and capture_response_body.","severity":"breaking","affected_versions":"breaking in 0.x series"},{"fix":"Always specify modules: logfire.install_auto_tracing(modules=['myapp', 'myapp.services'])","message":"install_auto_tracing() requires explicit modules parameter — there is no default. Calling it without modules raises TypeError.","severity":"breaking","affected_versions":"all"},{"fix":"pip install logfire. Remove pydantic-logfire from requirements. import logfire not from pydantic_logfire import ...","message":"pydantic-logfire on PyPI is a deprecated stub package that just depends on logfire. Use pip install logfire directly.","severity":"gotcha","affected_versions":"all"},{"fix":"Check current plan at logfire.pydantic.dev. Team plan ($49/mo) for 5 seats/5 projects. Growth plan ($249/mo) for unlimited.","message":"Logfire pricing changed January 2026. Free Personal plan now limited to 1 seat and 3 projects. Teams exceeding these limits needed to upgrade by February 1, 2026 or be auto-upgraded.","severity":"gotcha","affected_versions":"cloud service"},{"fix":"Set LOGFIRE_TOKEN environment variable in production, or run `logfire auth` to authenticate. Verify export is working: logfire.configure() logs the dashboard URL if the token is valid.","message":"logfire.configure() raises LogfireConfigError if LOGFIRE_TOKEN is missing or invalid, or `logfire auth` has not been run, preventing cloud export and application startup. It does not silently default to local console output.","severity":"breaking","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T10:00:54.077Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Install the OpenTelemetry SDK: `pip install opentelemetry-sdk` or ensure a fresh `logfire` installation handles all its dependencies correctly.","cause":"The 'logfire' library relies on OpenTelemetry components, and this error indicates that the necessary 'opentelemetry-sdk' package or its dependencies are not installed in the environment.","error":"ModuleNotFoundError: No module named 'opentelemetry'"},{"fix":"Set the `LOGFIRE_TOKEN` environment variable (e.g., `export LOGFIRE_TOKEN='your_token_here'`) or pass the token explicitly when configuring Logfire: `logfire.configure(token='your_token_here')`.","cause":"The Logfire SDK requires an authentication token to connect to the Logfire platform, which can be provided via the `LOGFIRE_TOKEN` environment variable or directly in `logfire.configure()`.","error":"ValueError: LOGFIRE_TOKEN environment variable must be provided."},{"fix":"Ensure you have installed the `logfire` package (not `pydantic-logfire`) and update your import statements to `import logfire`.","cause":"Developers might mistakenly try to import from the deprecated `pydantic-logfire` package instead of the current `logfire` package.","error":"ModuleNotFoundError: No module named 'pydantic_logfire'"},{"fix":"Install `pytest` (`pip install pytest`) or upgrade `logfire` to a newer version where this dependency issue may have been resolved, especially if you are not directly using `logfire.testing`.","cause":"In some older versions of `logfire` (e.g., 0.50), `pytest` was an unexpected transitive dependency, particularly if `logfire.testing` was imported indirectly.","error":"ModuleNotFoundError: No module named 'pytest'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.56,"mem_mb":25.7,"disk_size":"45.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.59,"mem_mb":25.7,"disk_size":"46.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.6,"mem_mb":25.7,"disk_size":"46.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.04,"mem_mb":23.8,"disk_size":"47M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.03,"mem_mb":23.8,"disk_size":"47M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.06,"mem_mb":23.8,"disk_size":"47M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.26,"mem_mb":28.2,"disk_size":"50.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.35,"mem_mb":28.2,"disk_size":"50.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.38,"mem_mb":28.2,"disk_size":"50.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.45,"mem_mb":26.4,"disk_size":"51M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.46,"mem_mb":26.4,"disk_size":"52M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.54,"mem_mb":26.4,"disk_size":"52M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.21,"mem_mb":28.1,"disk_size":"41.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.24,"mem_mb":28.1,"disk_size":"42.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.35,"mem_mb":28.1,"disk_size":"42.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.75,"mem_mb":26.3,"disk_size":"43M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.84,"mem_mb":26.3,"disk_size":"43M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.83,"mem_mb":26.3,"disk_size":"43M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.09,"mem_mb":30.4,"disk_size":"41.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.15,"mem_mb":30.4,"disk_size":"41.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.31,"mem_mb":30.5,"disk_size":"41.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.71,"mem_mb":28.6,"disk_size":"42M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.7,"mem_mb":28.6,"disk_size":"43M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.75,"mem_mb":28.6,"disk_size":"43M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.42,"mem_mb":25.5,"disk_size":"44.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.5,"mem_mb":25.5,"disk_size":"45.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.42,"mem_mb":25.5,"disk_size":"45.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.17,"mem_mb":23.6,"disk_size":"46M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.14,"mem_mb":23.6,"disk_size":"46M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"httpx,requests,sqlalchemy,asyncpg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.21,"mem_mb":23.6,"disk_size":"46M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}