Skip to content

Commit cee1516

Browse files
committed
Fixup Logger.emit signature
1 parent e75b0ab commit cee1516

File tree

4 files changed

+116
-12
lines changed

4 files changed

+116
-12
lines changed

opentelemetry-api/src/opentelemetry/_logs/_internal/__init__.py

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
.. versionadded:: 1.15.0
3434
"""
3535

36+
from __future__ import annotations
37+
3638
from abc import ABC, abstractmethod
3739
from logging import getLogger
3840
from os import environ
@@ -144,7 +146,20 @@ def __init__(
144146
self._attributes = attributes
145147

146148
@abstractmethod
147-
def emit(self, record: "LogRecord") -> None:
149+
def emit(
150+
self,
151+
# record parameter does not match the spec but we'll remove it in a later release
152+
record: "LogRecord | None" = None,
153+
*,
154+
timestamp: int | None = None,
155+
observed_timestamp: int | None = None,
156+
context: Context | None = None,
157+
severity_number: SeverityNumber | None = None,
158+
severity_text: str | None = None,
159+
body: AnyValue | None = None,
160+
attributes: _ExtendedAttributes | None = None,
161+
event_name: str | None = None,
162+
) -> None:
148163
"""Emits a :class:`LogRecord` representing a log to the processing pipeline."""
149164

150165

@@ -154,7 +169,20 @@ class NoOpLogger(Logger):
154169
All operations are no-op.
155170
"""
156171

157-
def emit(self, record: "LogRecord") -> None:
172+
def emit(
173+
self,
174+
# record parameter does not match the spec but we'll remove it in a later release
175+
record: "LogRecord | None" = None,
176+
*,
177+
timestamp: int | None = None,
178+
observed_timestamp: int | None = None,
179+
context: Context | None = None,
180+
severity_number: SeverityNumber | None = None,
181+
severity_text: str | None = None,
182+
body: AnyValue | None = None,
183+
attributes: _ExtendedAttributes | None = None,
184+
event_name: str | None = None,
185+
) -> None:
158186
pass
159187

160188

@@ -188,8 +216,33 @@ def _logger(self) -> Logger:
188216
return self._real_logger
189217
return self._noop_logger
190218

191-
def emit(self, record: LogRecord) -> None:
192-
self._logger.emit(record)
219+
def emit(
220+
self,
221+
# record parameter does not match the spec but we'll remove it in a later release
222+
record: LogRecord | None = None,
223+
*,
224+
timestamp: int | None = None,
225+
observed_timestamp: int | None = None,
226+
context: Context | None = None,
227+
severity_number: SeverityNumber | None = None,
228+
severity_text: str | None = None,
229+
body: AnyValue | None = None,
230+
attributes: _ExtendedAttributes | None = None,
231+
event_name: str | None = None,
232+
) -> None:
233+
if record:
234+
self._logger.emit(record)
235+
else:
236+
self._logger.emit(
237+
timestamp=timestamp,
238+
observed_timestamp=observed_timestamp,
239+
context=context,
240+
severity_number=severity_number,
241+
severity_text=severity_text,
242+
body=body,
243+
attributes=attributes,
244+
event_name=event_name,
245+
)
193246

194247

195248
class LoggerProvider(ABC):

opentelemetry-api/tests/logs/test_proxy.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,19 @@ def get_logger(
3434

3535

3636
class LoggerTest(_logs.NoOpLogger):
37-
def emit(self, record: _logs.LogRecord) -> None:
37+
def emit(
38+
self,
39+
record: typing.Optional[_logs.LogRecord] = None,
40+
*,
41+
timestamp=None,
42+
observed_timestamp=None,
43+
context=None,
44+
severity_number=None,
45+
severity_text=None,
46+
body=None,
47+
attributes=None,
48+
event_name=None,
49+
) -> None:
3850
pass
3951

4052

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -633,16 +633,17 @@ def _translate(self, record: logging.LogRecord) -> LogRecord:
633633
"WARN" if record.levelname == "WARNING" else record.levelname
634634
)
635635

636-
logger = get_logger(record.name, logger_provider=self._logger_provider)
637-
return LogRecord(
636+
# FIXME: what to do with the resource?
637+
# logger = get_logger(record.name, logger_provider=self._logger_provider)
638+
return dict(
638639
timestamp=timestamp,
639640
observed_timestamp=observered_timestamp,
640641
context=get_current() or None,
641642
severity_text=level_name,
642643
severity_number=severity_number,
643644
body=body,
644-
resource=logger.resource,
645645
attributes=attributes,
646+
# resource=logger.resource,
646647
)
647648

648649
def emit(self, record: logging.LogRecord) -> None:
@@ -653,7 +654,7 @@ def emit(self, record: logging.LogRecord) -> None:
653654
"""
654655
logger = get_logger(record.name, logger_provider=self._logger_provider)
655656
if not isinstance(logger, NoOpLogger):
656-
logger.emit(self._translate(record))
657+
logger.emit(**self._translate(record))
657658

658659
def flush(self) -> None:
659660
"""
@@ -692,16 +693,42 @@ def __init__(
692693
def resource(self):
693694
return self._resource
694695

695-
def emit(self, record: APILogRecord):
696+
def emit(
697+
self,
698+
# record is not on the specs and will be deprecated in a followup release
699+
record: APILogRecord | None = None,
700+
*,
701+
timestamp: int | None = None,
702+
observed_timestamp: int | None = None,
703+
context: Context | None = None,
704+
severity_text: str | None = None,
705+
severity_number: SeverityNumber | None = None,
706+
body: AnyValue | None = None,
707+
attributes: _ExtendedAttributes | None = None,
708+
event_name: str | None = None,
709+
):
696710
"""Emits the :class:`LogData` by associating :class:`LogRecord`
697711
and instrumentation info.
698712
"""
699-
if not isinstance(record, LogRecord):
713+
if not record:
714+
record = LogRecord(
715+
timestamp=timestamp,
716+
observed_timestamp=observed_timestamp,
717+
context=context,
718+
severity_text=severity_text,
719+
severity_number=severity_number,
720+
body=body,
721+
attributes=attributes,
722+
event_name=event_name,
723+
)
724+
elif not isinstance(record, LogRecord):
700725
# pylint:disable=protected-access
701726
record = LogRecord._from_api_log_record(
702727
record=record, resource=self._resource
703728
)
729+
704730
log_data = LogData(record, self._instrumentation_scope)
731+
705732
self._multi_log_record_processor.on_emit(log_data)
706733

707734

opentelemetry-sdk/tests/test_configurator.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,19 @@ def __init__(self, name, resource, processor):
113113
self.resource = resource
114114
self.processor = processor
115115

116-
def emit(self, record):
116+
def emit(
117+
self,
118+
record=None,
119+
*,
120+
timestamp=None,
121+
observed_timestamp=None,
122+
context=None,
123+
severity_number=None,
124+
severity_text=None,
125+
body=None,
126+
attributes=None,
127+
event_name=None,
128+
):
117129
self.processor.emit(record)
118130

119131

0 commit comments

Comments
 (0)