This repository was archived by the owner on Apr 15, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathexample_logs.py
66 lines (54 loc) · 2 KB
/
example_logs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "opentelemetry-exporter-otlp-proto-http",
# "opentelemetry-sdk",
# ]
# ///
"""Python code to generate OTel logs.
Adapted from
https://github.com/open-telemetry/opentelemetry-python/blob/main/docs/examples/logs/example.py
"""
import os
import logging
from opentelemetry import trace
from opentelemetry._logs import set_logger_provider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter, Compression
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
trace.set_tracer_provider(TracerProvider())
logger_provider = LoggerProvider(
resource=Resource.create(
{
'service.name': 'testing-service',
'service.instance.id': 'instance-12',
}
),
)
set_logger_provider(logger_provider)
endpoint = 'https://logfire-logs-proxy.pydantic.workers.dev/v1/logs'
# to run against a worker running locally
# endpoint = 'http://localhost:8787/v1/logs'
LOGFIRE_TOKEN = os.environ['LOGFIRE_TOKEN']
compression = Compression.Gzip
exporter = OTLPLogExporter(
endpoint=endpoint,
headers={'Authorization': f'Bearer {LOGFIRE_TOKEN}'},
compression=compression
)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
handler = LoggingHandler(level=logging.DEBUG, logger_provider=logger_provider)
logging.basicConfig(level=logging.DEBUG, handlers=[handler], format='%(message)s')
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('debug %d', 41)
logger1.info('info %d, compression=%s', 42, compression)
logger1.warning('warning endpoint=%s', endpoint)
logger1.error('error %d', 44)
# Trace context correlation
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span('foo'):
logger2.warning('nested span %d', 42)
logger_provider.shutdown()