Skip to content

Logs: LogRecord not documented, usage attempt fails with an exception #3552

@tigrannajaryan

Description

@tigrannajaryan

Describe your environment
Mac OS X
Python 3.9.6

Steps to reproduce
Try to use LogRecord described here: https://opentelemetry-python.readthedocs.io/en/latest/api/_logs.html#opentelemetry._logs.LogRecord

The docs don't say how to construct the LogRecord. I tried this:

logger_provider = LoggerProvider(
    resource=Resource.create(
        {
            "service.name": "shoppingcart",
            "service.instance.id": "instance-12",
        }
    ),
)
set_logger_provider(logger_provider)

_logger = _logs.get_logger("bridge-logger")
logRecord = _logs.LogRecord()
_logger.emit(logRecord)

What is the expected behavior?
An empty log record outputed.

What is the actual behavior?

Exception while exporting logs.
Traceback (most recent call last):
  File "/Users/tnajaryan/work/experiments/otel-python/lib/python3.9/site-packages/opentelemetry/sdk/_logs/_internal/export/__init__.py", line 312, in _export_batch
    self._exporter.export(self._log_records[:idx])  # type: ignore
  File "/Users/tnajaryan/work/experiments/otel-python/lib/python3.9/site-packages/opentelemetry/exporter/otlp/proto/grpc/_log_exporter/__init__.py", line 108, in export
    return self._export(batch)
  File "/Users/tnajaryan/work/experiments/otel-python/lib/python3.9/site-packages/opentelemetry/exporter/otlp/proto/grpc/exporter.py", line 263, in _export
    request=self._translate_data(data),
  File "/Users/tnajaryan/work/experiments/otel-python/lib/python3.9/site-packages/opentelemetry/exporter/otlp/proto/grpc/_log_exporter/__init__.py", line 105, in _translate_data
    return encode_logs(data)
  File "/Users/tnajaryan/work/experiments/otel-python/lib/python3.9/site-packages/opentelemetry/exporter/otlp/proto/common/_internal/_log_encoder/__init__.py", line 38, in encode_logs
    return ExportLogsServiceRequest(resource_logs=_encode_resource_logs(batch))
  File "/Users/tnajaryan/work/experiments/otel-python/lib/python3.9/site-packages/opentelemetry/exporter/otlp/proto/common/_internal/_log_encoder/__init__.py", line 59, in _encode_resource_logs
    sdk_resource = sdk_log.log_record.resource
AttributeError: 'LogRecord' object has no attribute 'resource'

I can't see a way to supply the 'resource', the LogRecord() constructor does not accept one. Besides, I should not need to, it should use the one given to LoggerProvider.

Additional context
Part of review open-telemetry/community#1751

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinglogging

    Type

    No type

    Projects

    Status

    Done

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions