Skip to content

Commit c1a9126

Browse files
authored
Add service.name to logging integrations (#1014)
1 parent d2dc959 commit c1a9126

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

elasticapm/handlers/logging.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ class LoggingFilter(logging.Filter):
172172
* elasticapm_transaction_id
173173
* elasticapm_trace_id
174174
* elasticapm_span_id
175+
* elasticapm_service_name
175176
176177
These attributes can then be incorporated into your handlers and formatters,
177178
so that you can tie log messages to transactions in elasticsearch.
@@ -226,7 +227,15 @@ def _add_attributes_to_log_record(record):
226227
span_id = span.id if span else None
227228
record.elasticapm_span_id = span_id
228229

229-
record.elasticapm_labels = {"transaction.id": transaction_id, "trace.id": trace_id, "span.id": span_id}
230+
service_name = transaction.tracer.config.service_name if transaction else None
231+
record.elasticapm_service_name = service_name
232+
233+
record.elasticapm_labels = {
234+
"transaction.id": transaction_id,
235+
"trace.id": trace_id,
236+
"span.id": span_id,
237+
"service.name": service_name,
238+
}
230239

231240
return record
232241

@@ -264,11 +273,13 @@ def format(self, record):
264273
record.elasticapm_transaction_id = None
265274
record.elasticapm_trace_id = None
266275
record.elasticapm_span_id = None
276+
record.elasticapm_service_name = None
267277
return super(Formatter, self).format(record=record)
268278

269279
def formatTime(self, record, datefmt=None):
270280
if not hasattr(record, "elasticapm_transaction_id"):
271281
record.elasticapm_transaction_id = None
272282
record.elasticapm_trace_id = None
273283
record.elasticapm_span_id = None
284+
record.elasticapm_service_name = None
274285
return super(Formatter, self).formatTime(record=record, datefmt=datefmt)

elasticapm/handlers/structlog.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def structlog_processor(logger, method_name, event_dict):
5353
transaction = execution_context.get_transaction()
5454
if transaction:
5555
event_dict["transaction.id"] = transaction.id
56+
event_dict["service.name"] = transaction.tracer.config.service_name
5657
if transaction and transaction.trace_parent:
5758
event_dict["trace.id"] = transaction.trace_parent.trace_id
5859
span = execution_context.get_span()

tests/handlers/logging/logging_tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ def test_logging_filter_no_span(elasticapm_client):
255255
record = logging.LogRecord(__name__, logging.DEBUG, __file__, 252, "dummy_msg", [], None)
256256
f.filter(record)
257257
assert record.elasticapm_transaction_id == transaction.id
258+
assert record.elasticapm_service_name == transaction.tracer.config.service_name
258259
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
259260
assert record.elasticapm_span_id is None
260261
assert record.elasticapm_labels
@@ -277,6 +278,7 @@ def test_logging_filter_span(elasticapm_client):
277278
record = logging.LogRecord(__name__, logging.DEBUG, __file__, 252, "dummy_msg", [], None)
278279
f.filter(record)
279280
assert record.elasticapm_transaction_id == transaction.id
281+
assert record.elasticapm_service_name == transaction.tracer.config.service_name
280282
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
281283
assert record.elasticapm_span_id == span.id
282284
assert record.elasticapm_labels
@@ -291,6 +293,7 @@ def test_logging_filter_span(elasticapm_client):
291293
record = logging.LogRecord(__name__, logging.DEBUG, __file__, 252, "dummy_msg2", [], None)
292294
f.filter(record)
293295
assert record.elasticapm_transaction_id == transaction.id
296+
assert record.elasticapm_service_name == transaction.tracer.config.service_name
294297
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
295298
assert record.elasticapm_span_id is None
296299
assert record.elasticapm_labels
@@ -303,6 +306,7 @@ def test_structlog_processor_span(elasticapm_client):
303306
event_dict = {}
304307
new_dict = structlog_processor(None, None, event_dict)
305308
assert new_dict["transaction.id"] == transaction.id
309+
assert new_dict["service.name"] == transaction.tracer.config.service_name
306310
assert new_dict["trace.id"] == transaction.trace_parent.trace_id
307311
assert new_dict["span.id"] == span.id
308312

@@ -316,6 +320,7 @@ def test_structlog_processor_span(elasticapm_client):
316320
event_dict = {}
317321
new_dict = structlog_processor(None, None, event_dict)
318322
assert new_dict["transaction.id"] == transaction.id
323+
assert new_dict["service.name"] == transaction.tracer.config.service_name
319324
assert new_dict["trace.id"] == transaction.trace_parent.trace_id
320325
assert "span.id" not in new_dict
321326

@@ -331,6 +336,7 @@ def test_automatic_log_record_factory_install(elasticapm_client):
331336
record_factory = logging.getLogRecordFactory()
332337
record = record_factory(__name__, logging.DEBUG, __file__, 252, "dummy_msg", [], None)
333338
assert record.elasticapm_transaction_id == transaction.id
339+
assert record.elasticapm_service_name == transaction.tracer.config.service_name
334340
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
335341
assert record.elasticapm_span_id == span.id
336342
assert record.elasticapm_labels
@@ -342,10 +348,12 @@ def test_formatter():
342348
formatted_record = formatter.format(record)
343349
assert "| elasticapm" in formatted_record
344350
assert hasattr(record, "elasticapm_transaction_id")
351+
assert hasattr(record, "elasticapm_service_name")
345352
record = logging.LogRecord(__name__, logging.DEBUG, __file__, 252, "dummy_msg", [], None)
346353
formatted_time = formatter.formatTime(record)
347354
assert formatted_time
348355
assert hasattr(record, "elasticapm_transaction_id")
356+
assert hasattr(record, "elasticapm_service_name")
349357

350358

351359
def test_logging_handler_no_client(recwarn):

0 commit comments

Comments
 (0)