diff --git a/google/cloud/logging_v2/handlers/handlers.py b/google/cloud/logging_v2/handlers/handlers.py index 175cd010..99346532 100644 --- a/google/cloud/logging_v2/handlers/handlers.py +++ b/google/cloud/logging_v2/handlers/handlers.py @@ -126,6 +126,8 @@ def __init__( self.project_id = client.project self.resource = resource self.labels = labels + # add extra keys to log record + self.addFilter(CloudLoggingFilter(self.project_id)) def emit(self, record): """Actually log the specified logging record. @@ -138,25 +140,31 @@ def emit(self, record): record (logging.LogRecord): The record to be logged. """ message = super(CloudLoggingHandler, self).format(record) - trace_id = getattr(record, "trace", None) - span_id = getattr(record, "span_id", None) - http_request = getattr(record, "http_request", None) - resource = getattr(record, "resource", self.resource) user_labels = getattr(record, "labels", {}) # merge labels total_labels = self.labels if self.labels is not None else {} total_labels.update(user_labels) if len(total_labels) == 0: total_labels = None + # create source location object + if record.lineno and record.funcName and record.pathname: + source_location = { + "file": record.pathname, + "line": str(record.lineno), + "function": record.funcName, + } + else: + source_location = None # send off request self.transport.send( record, message, - resource=resource, + resource=getattr(record, "resource", self.resource), labels=(total_labels if total_labels else None), - trace=trace_id, - span_id=span_id, - http_request=http_request, + trace=(record.trace if record.trace else None), + span_id=getattr(record, "span_id", None), + http_request=(record.http_request if record.http_request else None), + source_location=source_location, ) diff --git a/tests/environment b/tests/environment index f0e27265..273db6c6 160000 --- a/tests/environment +++ b/tests/environment @@ -1 +1 @@ -Subproject commit f0e2726579ef96f8e6b3ceaed8145d2bfbfa32bc +Subproject commit 273db6c60b8f39fa5092b01730ff4d2dffcca17e diff --git a/tests/unit/handlers/test_handlers.py b/tests/unit/handlers/test_handlers.py index 9772d7b0..c182a5b7 100644 --- a/tests/unit/handlers/test_handlers.py +++ b/tests/unit/handlers/test_handlers.py @@ -257,11 +257,11 @@ def test_emit(self): logname = "loggername" message = "hello world" record = logging.LogRecord(logname, logging, None, None, message, None, None) + handler.filter(record) handler.emit(record) - self.assertEqual( handler.transport.send_called_with, - (record, message, _GLOBAL_RESOURCE, None, None, None, None), + (record, message, _GLOBAL_RESOURCE, None, None, None, None, None), ) def test_emit_manual_field_override(self): @@ -286,6 +286,15 @@ def test_emit_manual_field_override(self): setattr(record, "resource", expected_resource) expected_labels = {"test-label": "manual"} setattr(record, "labels", expected_labels) + expected_source = { + "file": "test-file", + "line": str(1), + "function": "test-func", + } + setattr(record, "lineno", int(expected_source["line"])) + setattr(record, "funcName", expected_source["function"]) + setattr(record, "pathname", expected_source["file"]) + handler.filter(record) handler.emit(record) self.assertEqual( @@ -298,6 +307,7 @@ def test_emit_manual_field_override(self): expected_trace, expected_span, expected_http, + expected_source, ), ) @@ -413,6 +423,7 @@ def send( trace=None, span_id=None, http_request=None, + source_location=None, ): self.send_called_with = ( record, @@ -422,4 +433,5 @@ def send( trace, span_id, http_request, + source_location, )