Agent skill

logfire

Structured observability with Pydantic Logfire and OpenTelemetry. Use when: (1) Adding traces/logs to Python APIs, (2) Instrumenting FastAPI, HTTPX, SQLAlchemy, or LLMs, (3) Setting up service metadata, (4) Configuring sampling or scrubbing sensitive data, (5) Testing observability code.

Stars 3
Forks 0

Install this agent skill to your Project

npx add-skill https://github.com/jiatastic/open-python-skills/tree/main/skills/logfire

SKILL.md

Logfire

Structured observability for Python using Pydantic Logfire - fast setup, powerful features, OpenTelemetry-compatible.

Quick Start

bash
uv pip install logfire
python
import logfire

logfire.configure(service_name="my-api", service_version="1.0.0")
logfire.info("Application started")

Core Patterns

1. Service Configuration

Always set service metadata at startup:

python
import logfire

logfire.configure(
    service_name="backend",
    service_version="1.0.0",
    environment="production",
    console=False,           # Disable console output in production
    send_to_logfire=True,    # Send to Logfire platform
)

2. Framework Instrumentation

Instrument frameworks before creating clients/apps:

python
import logfire
from fastapi import FastAPI

# Configure FIRST
logfire.configure(service_name="backend")

# Then instrument
logfire.instrument_fastapi()
logfire.instrument_httpx()
logfire.instrument_sqlalchemy()

# Then create app
app = FastAPI()

3. Log Levels and Structured Logging

python
# All log levels (trace → fatal)
logfire.trace("Detailed trace", step=1)
logfire.debug("Debug context", variable=locals())
logfire.info("User action", action="login", success=True)
logfire.notice("Important event", event_type="milestone")
logfire.warn("Potential issue", threshold_exceeded=True)
logfire.error("Operation failed", error_code=500)
logfire.fatal("Critical failure", component="database")

# Python 3.11+ f-string magic (auto-extracts variables)
user_id = 123
status = "active"
logfire.info(f"User {user_id} status: {status}")
# Equivalent to: logfire.info("User {user_id}...", user_id=user_id, status=status)

# Exception logging with automatic traceback
try:
    risky_operation()
except Exception:
    logfire.exception("Operation failed", context="extra_info")

4. Manual Spans

python
# Spans for tracing operations
with logfire.span("Process order {order_id}", order_id="ORD-123"):
    logfire.info("Validating cart")
    # ... processing logic
    logfire.info("Order complete")

# Dynamic span attributes
with logfire.span("Database query") as span:
    results = execute_query()
    span.set_attribute("result_count", len(results))
    span.message = f"Query returned {len(results)} results"

5. Custom Metrics

python
# Counter - monotonically increasing
request_counter = logfire.metric_counter("http.requests", unit="1")
request_counter.add(1, {"endpoint": "/api/users", "method": "GET"})

# Gauge - current value
temperature = logfire.metric_gauge("temperature", unit="°C")
temperature.set(23.5)

# Histogram - distribution of values
latency = logfire.metric_histogram("request.duration", unit="ms")
latency.record(45.2, {"endpoint": "/api/data"})

6. LLM Observability

python
import logfire
from pydantic_ai import Agent

logfire.configure()
logfire.instrument_pydantic_ai()  # Traces all agent interactions

agent = Agent("openai:gpt-4o", system_prompt="You are helpful.")
result = agent.run_sync("Hello!")

7. Suppress Noisy Instrumentation

python
# Suppress entire scope (e.g., noisy library)
logfire.suppress_scopes("google.cloud.bigquery.opentelemetry_tracing")

# Suppress specific code block
with logfire.suppress_instrumentation():
    client.get("https://internal-healthcheck.local")  # Not traced

8. Sensitive Data Scrubbing

python
import logfire

# Add custom patterns to scrub
logfire.configure(
    scrubbing=logfire.ScrubbingOptions(
        extra_patterns=["api_key", "secret", "token"]
    )
)

# Custom callback for fine-grained control
def scrubbing_callback(match: logfire.ScrubMatch):
    if match.path == ("attributes", "safe_field"):
        return match.value  # Don't scrub this field
    return None  # Use default scrubbing

logfire.configure(
    scrubbing=logfire.ScrubbingOptions(callback=scrubbing_callback)
)

9. Sampling for High-Traffic Services

python
import logfire

# Sample 50% of traces
logfire.configure(sampling=logfire.SamplingOptions(head=0.5))

# Disable metrics to reduce volume
logfire.configure(metrics=False)

10. Testing

python
import logfire
from logfire.testing import CaptureLogfire

def test_user_creation(capfire: CaptureLogfire):
    create_user("Alice", "alice@example.com")
    
    spans = capfire.exporter.exported_spans
    assert len(spans) >= 1
    assert spans[0].attributes["user_name"] == "Alice"
    
    capfire.exporter.clear()  # Clean up for next test

Available Integrations

Category Integration Method
Web FastAPI logfire.instrument_fastapi(app)
Starlette logfire.instrument_starlette(app)
Django logfire.instrument_django()
Flask logfire.instrument_flask(app)
AIOHTTP Server logfire.instrument_aiohttp_server()
ASGI logfire.instrument_asgi(app)
WSGI logfire.instrument_wsgi(app)
HTTP HTTPX logfire.instrument_httpx()
Requests logfire.instrument_requests()
AIOHTTP Client logfire.instrument_aiohttp_client()
Database SQLAlchemy logfire.instrument_sqlalchemy(engine)
Asyncpg logfire.instrument_asyncpg()
Psycopg logfire.instrument_psycopg()
Redis logfire.instrument_redis()
PyMongo logfire.instrument_pymongo()
LLM Pydantic AI logfire.instrument_pydantic_ai()
OpenAI logfire.instrument_openai()
Anthropic logfire.instrument_anthropic()
MCP logfire.instrument_mcp()
Tasks Celery logfire.instrument_celery()
AWS Lambda logfire.instrument_aws_lambda()
Logging Standard logging logfire.instrument_logging()
Structlog logfire.instrument_structlog()
Loguru logfire.instrument_loguru()
Print logfire.instrument_print()
Other Pydantic logfire.instrument_pydantic()
System Metrics logfire.instrument_system_metrics()

Common Pitfalls

Issue Symptom Fix
Missing service name Spans hard to find in UI Set service_name in configure()
Late instrumentation No spans captured Call configure() before creating clients
High-cardinality attrs Storage explosion Use IDs, not full payloads as attributes
Console noise Logs pollute stdout Set console=False in production

References

  • Configuration Options - All configure() parameters
  • Integrations Guide - Framework-specific setup
  • Metrics Guide - Counter, gauge, histogram, system metrics
  • Advanced Patterns - Sampling, scrubbing, suppression, testing
  • Pitfalls & Troubleshooting - Common issues and solutions
  • Official Docs

Expand your agent's capabilities with these related and highly-rated skills.

jiatastic/open-python-skills

linting

Python linting with Ruff - an extremely fast linter written in Rust. Use when: (1) Standardizing code quality, (2) Fixing style warnings, (3) Enforcing rules in CI, (4) Replacing flake8/isort/pyupgrade/autoflake, (5) Configuring lint rules and suppressions.

3 0
Explore
jiatastic/open-python-skills

ty-skills

Python type checking expertise using ty - the extremely fast type checker by Astral. Use when: (1) Adding type annotations to Python code, (2) Fixing type errors reported by ty, (3) Migrating from mypy/pyright to ty, (4) Configuring ty for projects, (5) Understanding advanced type patterns (generics, protocols, intersection types), (6) Setting up ty in editors (VS Code, Cursor, Neovim, PyCharm).

3 0
Explore
jiatastic/open-python-skills

pydantic

Pydantic models and validation. Use when: (1) Defining schemas, (2) Validating input/output, (3) Generating JSON schema.

3 0
Explore
jiatastic/open-python-skills

excalidraw-ai

Create professional Excalidraw diagrams by generating JSON directly. This skill provides the Excalidraw JSON schema reference and professional icon libraries for AI agents to autonomously create diagrams without templates.

3 0
Explore
jiatastic/open-python-skills

commit-message

Analyze git changes and generate conventional commit messages. Supports batch commits for multiple unrelated changes. Use when: (1) Creating git commits, (2) Reviewing staged changes, (3) Splitting large changesets into logical commits.

3 0
Explore
jiatastic/open-python-skills

python-backend

Python backend development expertise for FastAPI, security patterns, database operations, Upstash integrations, and code quality. Use when: (1) Building REST APIs with FastAPI, (2) Implementing JWT/OAuth2 authentication, (3) Setting up SQLAlchemy/async databases, (4) Integrating Redis/Upstash caching, (5) Refactoring AI-generated Python code (deslopification), (6) Designing API patterns, or (7) Optimizing backend performance.

3 0
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results