|
| 1 | +import logging |
| 2 | + |
| 3 | +from opentelemetry import trace |
| 4 | +from opentelemetry.exporter.otlp.proto.grpc.log_exporter import OTLPLogExporter |
| 5 | +from opentelemetry.sdk.logs import OTLPHandler, get_log_emitter_provider |
| 6 | +from opentelemetry.sdk.logs.export import SimpleLogProcessor |
| 7 | +from opentelemetry.sdk.trace import TracerProvider |
| 8 | +from opentelemetry.sdk.trace.export import ( |
| 9 | + ConsoleSpanExporter, |
| 10 | + SimpleSpanProcessor, |
| 11 | +) |
| 12 | + |
| 13 | +trace.set_tracer_provider(TracerProvider()) |
| 14 | +trace.get_tracer_provider().add_span_processor( |
| 15 | + SimpleSpanProcessor(ConsoleSpanExporter()) |
| 16 | +) |
| 17 | + |
| 18 | +log_emitter_provider = get_log_emitter_provider() |
| 19 | +exporter = OTLPLogExporter(insecure=True) |
| 20 | +log_emitter_provider.add_log_processor(SimpleLogProcessor(exporter)) |
| 21 | +log_emitter = log_emitter_provider.get_log_emitter(__name__, "0.1") |
| 22 | +handler = OTLPHandler(level=logging.NOTSET, log_emitter=log_emitter) |
| 23 | + |
| 24 | +# Attach OTLP handler to root logger |
| 25 | +logging.getLogger("root").addHandler(handler) |
| 26 | + |
| 27 | +# Log directly |
| 28 | +logging.info("Jackdaws love my big sphinx of quartz.") |
| 29 | + |
| 30 | +# Create different namespaced loggers |
| 31 | +logger1 = logging.getLogger("myapp.area1") |
| 32 | +logger2 = logging.getLogger("myapp.area2") |
| 33 | + |
| 34 | +logger1.debug("Quick zephyrs blow, vexing daft Jim.") |
| 35 | +logger1.info("How quickly daft jumping zebras vex.") |
| 36 | +logger2.warning("Jail zesty vixen who grabbed pay from quack.") |
| 37 | +logger2.error("The five boxing wizards jump quickly.") |
| 38 | + |
| 39 | + |
| 40 | +# Trace context correlation |
| 41 | +tracer = trace.get_tracer(__name__) |
| 42 | +with tracer.start_as_current_span("foo"): |
| 43 | + # Do something |
| 44 | + logger2.error("Hyderabad, we have a major problem.") |
| 45 | + |
| 46 | +log_emitter_provider.shutdown() |
0 commit comments