Metadata-Version: 2.4
Name: otel-log
Version: 0.4.0
Summary: OpenTelemetry Standard Log Format library for Python
Keywords: opentelemetry,otel,logging,structured-logging,observability,tracing
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Logging
Classifier: Topic :: System :: Monitoring
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: opentelemetry-api>=1.20.0
Provides-Extra: otel
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "otel"
Requires-Dist: opentelemetry-exporter-otlp>=1.20.0; extra == "otel"
Provides-Extra: tracing
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "tracing"
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.20.0; extra == "tracing"
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20.0; extra == "tracing"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: hypothesis>=6.0; extra == "dev"
Requires-Dist: jsonschema>=4.0; extra == "dev"
Provides-Extra: web
Requires-Dist: opentelemetry-instrumentation-flask>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-django>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-fastapi>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-starlette>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-tornado>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-falcon>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-pyramid>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-aiohttp-client>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-aiohttp-server>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-asgi>=0.40b0; extra == "web"
Requires-Dist: opentelemetry-instrumentation-wsgi>=0.40b0; extra == "web"
Provides-Extra: db
Requires-Dist: opentelemetry-instrumentation-psycopg>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-psycopg2>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-pymysql>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-mysql>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-mysqlclient>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-sqlite3>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-asyncpg>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-aiopg>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-pymongo>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-pymssql>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-redis>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-pymemcache>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-dbapi>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-elasticsearch>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-cassandra>=0.40b0; extra == "db"
Requires-Dist: opentelemetry-instrumentation-tortoiseorm>=0.40b0; extra == "db"
Provides-Extra: messaging
Requires-Dist: opentelemetry-instrumentation-celery>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-pika>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-aio-pika>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-kafka-python>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-confluent-kafka>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-aiokafka>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-boto3sqs>=0.40b0; extra == "messaging"
Requires-Dist: opentelemetry-instrumentation-remoulade>=0.40b0; extra == "messaging"
Provides-Extra: http-clients
Requires-Dist: opentelemetry-instrumentation-requests>=0.40b0; extra == "http-clients"
Requires-Dist: opentelemetry-instrumentation-urllib>=0.40b0; extra == "http-clients"
Requires-Dist: opentelemetry-instrumentation-urllib3>=0.40b0; extra == "http-clients"
Requires-Dist: opentelemetry-instrumentation-httpx>=0.40b0; extra == "http-clients"
Requires-Dist: opentelemetry-instrumentation-grpc>=0.40b0; extra == "http-clients"
Provides-Extra: aws
Requires-Dist: opentelemetry-instrumentation-botocore>=0.40b0; extra == "aws"
Requires-Dist: opentelemetry-instrumentation-aws-lambda>=0.40b0; extra == "aws"
Provides-Extra: misc
Requires-Dist: opentelemetry-instrumentation-logging>=0.40b0; extra == "misc"
Requires-Dist: opentelemetry-instrumentation-jinja2>=0.40b0; extra == "misc"
Requires-Dist: opentelemetry-instrumentation-click>=0.40b0; extra == "misc"
Requires-Dist: opentelemetry-instrumentation-asyncclick>=0.40b0; extra == "misc"
Requires-Dist: opentelemetry-instrumentation-asyncio>=0.40b0; extra == "misc"
Requires-Dist: opentelemetry-instrumentation-threading>=0.40b0; extra == "misc"
Requires-Dist: opentelemetry-instrumentation-system-metrics>=0.40b0; extra == "misc"
Provides-Extra: all-instrumentation
Requires-Dist: otel-log[web]; extra == "all-instrumentation"
Requires-Dist: otel-log[db]; extra == "all-instrumentation"
Requires-Dist: otel-log[messaging]; extra == "all-instrumentation"
Requires-Dist: otel-log[http-clients]; extra == "all-instrumentation"
Requires-Dist: otel-log[aws]; extra == "all-instrumentation"
Requires-Dist: otel-log[misc]; extra == "all-instrumentation"
Requires-Dist: otel-log[tracing]; extra == "all-instrumentation"

# otel-log

OpenTelemetry-compliant structured logging for Python. Produces JSON logs conforming to the [OTel Log Data Model](https://opentelemetry.io/docs/specs/otel/logs/data-model/) and optionally configures distributed tracing from a single call.

## Installation

```bash
# Logging only (lightweight — only opentelemetry-api required)
pip install otel-log

# Logging + tracing
pip install otel-log[tracing]
```

## Quick Start

```python
import otel_log

result = otel_log.setup("my-service", version="1.0.0")

import logging
logging.info("Hello world")
# => {"Timestamp":"...","SeverityText":"INFO","SeverityNumber":9,"Body":"Hello world","Resource":{"service.name":"my-service","service.version":"1.0.0"}}

result.shutdown()
```

## With Tracing

```python
import otel_log

result = otel_log.setup("my-service", endpoint="localhost:4317")

with result.tracer.start_as_current_span("my-operation"):
    logging.info("Inside a span")
    # TraceId, SpanId, TraceFlags auto-injected into the JSON output
```

## Advanced Usage

For auto-instrumentors, custom exporters, or fine-grained configuration:

```python
from otel_log import OTelInitializer, ResourceConfig, InstrumentationConfig

result = OTelInitializer.initialize(
    resource_config=ResourceConfig(
        service_name="my-service",
        service_version="1.0.0",
        deployment_environment="production",
        custom_attributes={"cloud.region": "us-east-1"},
    ),
    instrumentation_config=InstrumentationConfig(
        endpoint="localhost:4317",
        protocol="grpc",
    ),
)
```

## Environment Variables

| Variable | Required | Description |
|---|---|---|
| `OTEL_SERVICE_NAME` | **Yes** | Service name (overrides config) |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | No | OTLP trace exporter endpoint. If unset, tracing is disabled (no-op). |
| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | No | OTLP log exporter endpoint. If unset, logs go to console only. |
| `OTEL_RESOURCE_ATTRIBUTES` | No | Comma-separated key=value resource attributes |

## Output Format

All logs conform to the shared JSON schema:

```json
{
  "Timestamp": "2026-03-22T12:00:00.000000Z",
  "SeverityText": "INFO",
  "SeverityNumber": 9,
  "Body": "User logged in",
  "Resource": {"service.name": "my-service"},
  "TraceId": "0af7651916cd43dd8448eb211c80319c",
  "SpanId": "b7ad6b7169203331",
  "TraceFlags": "01"
}
```

## License

Proprietary. All rights reserved.
