Skip to content

Commit 8c7b3bd

Browse files
authored
Add service.environment to log records (#1833)
* Add service.environment to log records * CHANGELOG
1 parent a16dd43 commit 8c7b3bd

File tree

4 files changed

+16
-0
lines changed

4 files changed

+16
-0
lines changed

CHANGELOG.asciidoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ endif::[]
4444
* Implement partial transaction support in AWS lambda {pull}1784[#1784]
4545
* Add instrumentation for redis.asyncio {pull}1807[#1807]
4646
* Add support for urllib3 v2.0.1+ {pull}1822[#1822]
47+
* Add `service.environment` to log correlation {pull}1833[#1833]
4748
4849
[float]
4950
===== Bug fixes

elasticapm/handlers/logging.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,15 @@ def _add_attributes_to_log_record(record):
232232
service_name = client.config.service_name if client else None
233233
record.elasticapm_service_name = service_name
234234

235+
service_environment = client.config.environment if client else None
236+
record.elasticapm_service_environment = service_environment
237+
235238
record.elasticapm_labels = {
236239
"transaction.id": transaction_id,
237240
"trace.id": trace_id,
238241
"span.id": span_id,
239242
"service.name": service_name,
243+
"service.environment": service_environment,
240244
}
241245

242246
return record
@@ -273,6 +277,7 @@ def format(self, record):
273277
record.elasticapm_trace_id = None
274278
record.elasticapm_span_id = None
275279
record.elasticapm_service_name = None
280+
record.elasticapm_service_environment = None
276281
return super(Formatter, self).format(record=record)
277282

278283
def formatTime(self, record, datefmt=None):
@@ -281,4 +286,5 @@ def formatTime(self, record, datefmt=None):
281286
record.elasticapm_trace_id = None
282287
record.elasticapm_span_id = None
283288
record.elasticapm_service_name = None
289+
record.elasticapm_service_environment = None
284290
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
@@ -57,6 +57,7 @@ def structlog_processor(logger, method_name, event_dict):
5757
client = get_client()
5858
if client:
5959
event_dict["service.name"] = client.config.service_name
60+
event_dict["service.environment"] = client.config.environment
6061
if transaction and transaction.trace_parent:
6162
event_dict["trace.id"] = transaction.trace_parent.trace_id
6263
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
@@ -266,6 +266,7 @@ def test_logging_filter_no_span(elasticapm_client):
266266
f.filter(record)
267267
assert record.elasticapm_transaction_id == transaction.id
268268
assert record.elasticapm_service_name == transaction.tracer.config.service_name
269+
assert record.elasticapm_service_environment == transaction.tracer.config.environment
269270
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
270271
assert record.elasticapm_span_id is None
271272
assert record.elasticapm_labels
@@ -289,6 +290,7 @@ def test_logging_filter_span(elasticapm_client):
289290
f.filter(record)
290291
assert record.elasticapm_transaction_id == transaction.id
291292
assert record.elasticapm_service_name == transaction.tracer.config.service_name
293+
assert record.elasticapm_service_environment == transaction.tracer.config.environment
292294
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
293295
assert record.elasticapm_span_id == span.id
294296
assert record.elasticapm_labels
@@ -304,6 +306,7 @@ def test_logging_filter_span(elasticapm_client):
304306
f.filter(record)
305307
assert record.elasticapm_transaction_id == transaction.id
306308
assert record.elasticapm_service_name == transaction.tracer.config.service_name
309+
assert record.elasticapm_service_environment == transaction.tracer.config.environment
307310
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
308311
assert record.elasticapm_span_id is None
309312
assert record.elasticapm_labels
@@ -317,6 +320,7 @@ def test_structlog_processor_span(elasticapm_client):
317320
new_dict = structlog_processor(None, None, event_dict)
318321
assert new_dict["transaction.id"] == transaction.id
319322
assert new_dict["service.name"] == transaction.tracer.config.service_name
323+
assert new_dict["service.environment"] == transaction.tracer.config.environment
320324
assert new_dict["trace.id"] == transaction.trace_parent.trace_id
321325
assert new_dict["span.id"] == span.id
322326

@@ -331,6 +335,7 @@ def test_structlog_processor_span(elasticapm_client):
331335
new_dict = structlog_processor(None, None, event_dict)
332336
assert new_dict["transaction.id"] == transaction.id
333337
assert new_dict["service.name"] == transaction.tracer.config.service_name
338+
assert new_dict["service.environment"] == transaction.tracer.config.environment
334339
assert new_dict["trace.id"] == transaction.trace_parent.trace_id
335340
assert "span.id" not in new_dict
336341

@@ -346,6 +351,7 @@ def test_automatic_log_record_factory_install(elasticapm_client):
346351
record = record_factory(__name__, logging.DEBUG, __file__, 252, "dummy_msg", [], None)
347352
assert record.elasticapm_transaction_id == transaction.id
348353
assert record.elasticapm_service_name == transaction.tracer.config.service_name
354+
assert record.elasticapm_service_environment == transaction.tracer.config.environment
349355
assert record.elasticapm_trace_id == transaction.trace_parent.trace_id
350356
assert record.elasticapm_span_id == span.id
351357
assert record.elasticapm_labels
@@ -358,11 +364,13 @@ def test_formatter():
358364
assert "| elasticapm" in formatted_record
359365
assert hasattr(record, "elasticapm_transaction_id")
360366
assert hasattr(record, "elasticapm_service_name")
367+
assert hasattr(record, "elasticapm_service_environment")
361368
record = logging.LogRecord(__name__, logging.DEBUG, __file__, 252, "dummy_msg", [], None)
362369
formatted_time = formatter.formatTime(record)
363370
assert formatted_time
364371
assert hasattr(record, "elasticapm_transaction_id")
365372
assert hasattr(record, "elasticapm_service_name")
373+
assert hasattr(record, "elasticapm_service_environment")
366374

367375

368376
def test_logging_handler_no_client(recwarn):

0 commit comments

Comments
 (0)