88import logging
99import os
1010import time
11- from typing import List , Sequence
11+ from typing import Any , List , Sequence , TYPE_CHECKING
1212
1313from opentelemetry ._logs import set_logger_provider
1414
1515from opentelemetry .exporter .otlp .proto .http ._log_exporter import OTLPLogExporter
1616from opentelemetry .sdk ._logs import LoggerProvider , LoggingHandler
17- from opentelemetry .sdk ._logs ._internal import LogData
18- from opentelemetry .sdk ._logs .export import (
19- BatchLogRecordProcessor ,
20- ConsoleLogExporter ,
21- LogExporter ,
22- )
17+ from opentelemetry .sdk ._logs .export import BatchLogRecordProcessor
2318from opentelemetry .sdk .resources import Resource
2419
20+ # These types are available in opentelemetry-sdk but Pyre's type stubs
21+ # don't include them. We import them at runtime and provide type aliases for
22+ # static type checking.
23+ if TYPE_CHECKING :
24+ # pyre-fixme[33]: Aliasing to Any is prohibited. opentelemetry-sdk lacks type stubs.
25+ ReadableLogRecord = Any
26+ # pyre-fixme[33]: Aliasing to Any is prohibited. opentelemetry-sdk lacks type stubs.
27+ LogRecordExporter = Any
28+ # pyre-fixme[33]: Aliasing to Any is prohibited. opentelemetry-sdk lacks type stubs.
29+ LogRecordExportResult = Any
30+ # pyre-fixme[33]: Aliasing to Any is prohibited. opentelemetry-sdk lacks type stubs.
31+ ConsoleLogRecordExporter = Any
32+ else :
33+ from opentelemetry .sdk ._logs import ReadableLogRecord
34+ from opentelemetry .sdk ._logs .export import (
35+ ConsoleLogRecordExporter ,
36+ LogRecordExporter ,
37+ LogRecordExportResult ,
38+ )
39+
2540_LOGGER_PROVIDER : dict [str , LoggerProvider ] = {}
2641# Path to the file containing OTEL resource attributes
2742TORCHFT_OTEL_RESOURCE_ATTRIBUTES_JSON = "TORCHFT_OTEL_RESOURCE_ATTRIBUTES_JSON"
2843
2944
30- class TeeLogExporter (LogExporter ):
45+ class TeeLogExporter (LogRecordExporter ):
3146 """Exporter that writes to multiple exporters."""
3247
3348 def __init__ (
3449 self ,
35- exporters : List [LogExporter ],
50+ exporters : List [LogRecordExporter ],
3651 ) -> None :
3752 self ._exporters = exporters
3853
39- def export (self , batch : Sequence [LogData ]) -> None :
54+ def export (self , batch : Sequence [ReadableLogRecord ]) -> LogRecordExportResult :
4055 for e in self ._exporters :
4156 e .export (batch )
57+ return LogRecordExportResult .SUCCESS
4258
4359 def shutdown (self ) -> None :
4460 for e in self ._exporters :
@@ -49,8 +65,6 @@ def setup_logger(name: str) -> None:
4965 if os .environ .get ("TORCHFT_USE_OTEL" , "false" ) == "false" :
5066 return
5167
52- global _LOGGER_PROVIDER
53-
5468 if name in _LOGGER_PROVIDER :
5569 return
5670
@@ -70,7 +84,7 @@ def setup_logger(name: str) -> None:
7084
7185 exporter = TeeLogExporter (
7286 exporters = [
73- ConsoleLogExporter (),
87+ ConsoleLogRecordExporter (),
7488 OTLPLogExporter (
7589 timeout = 5 ,
7690 ),
0 commit comments