diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index aecbd68ccd..1d1bd22dc4 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -934,7 +934,7 @@ def _capture_log(self, log: "Optional[Log]") -> None: log["attributes"]["sentry.trace.parent_span_id"] = span_id # The user, if present, is always set on the isolation scope. - if isolation_scope._user is not None: + if self.should_send_default_pii() and isolation_scope._user is not None: for log_attribute, user_attribute in ( ("user.id", "id"), ("user.name", "username"), @@ -998,7 +998,7 @@ def _capture_metric(self, metric: "Optional[Metric]") -> None: if span_id is not None: metric["span_id"] = span_id - if isolation_scope._user is not None: + if self.should_send_default_pii() and isolation_scope._user is not None: for metric_attribute, user_attribute in ( ("user.id", "id"), ("user.name", "username"), diff --git a/tests/test_logs.py b/tests/test_logs.py index 15baa9328b..f5e42e8b85 100644 --- a/tests/test_logs.py +++ b/tests/test_logs.py @@ -359,8 +359,8 @@ def test_auto_flush_logs_after_100(sentry_init, capture_envelopes): def test_log_user_attributes(sentry_init, capture_envelopes): - """User attributes are sent if enable_logs is True.""" - sentry_init(enable_logs=True) + """User attributes are sent if enable_logs is True and send_default_pii is True.""" + sentry_init(enable_logs=True, send_default_pii=True) sentry_sdk.set_user({"id": "1", "email": "test@example.com", "username": "test"}) envelopes = capture_envelopes() @@ -381,6 +381,26 @@ def test_log_user_attributes(sentry_init, capture_envelopes): } +def test_log_no_user_attributes_if_no_pii(sentry_init, capture_envelopes): + """User attributes are not if PII sending is off.""" + sentry_init(enable_logs=True, send_default_pii=False) + + sentry_sdk.set_user({"id": "1", "email": "test@example.com", "username": "test"}) + envelopes = capture_envelopes() + + python_logger = logging.Logger("test-logger") + python_logger.warning("Hello, world!") + + get_client().flush() + + logs = envelopes_to_logs(envelopes) + (log,) = logs + + assert "user.id" not in log["attributes"] + assert "user.email" not in log["attributes"] + assert "user.name" not in log["attributes"] + + @minimum_python_37 def test_auto_flush_logs_after_5s(sentry_init, capture_envelopes): """ diff --git a/tests/test_metrics.py b/tests/test_metrics.py index 0a1736a537..450538d763 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -117,7 +117,7 @@ def test_metrics_with_attributes(sentry_init, capture_envelopes): def test_metrics_with_user(sentry_init, capture_envelopes): - sentry_init() + sentry_init(send_default_pii=True) envelopes = capture_envelopes() sentry_sdk.set_user( @@ -135,6 +135,25 @@ def test_metrics_with_user(sentry_init, capture_envelopes): assert metrics[0]["attributes"]["user.name"] == "testuser" +def test_metrics_no_user_if_pii_off(sentry_init, capture_envelopes): + sentry_init(send_default_pii=False) + envelopes = capture_envelopes() + + sentry_sdk.set_user( + {"id": "user-123", "email": "test@example.com", "username": "testuser"} + ) + sentry_sdk.metrics.count("test.user.counter", 1) + + get_client().flush() + + metrics = envelopes_to_metrics(envelopes) + assert len(metrics) == 1 + + assert "user.id" not in metrics[0]["attributes"] + assert "user.email" not in metrics[0]["attributes"] + assert "user.name" not in metrics[0]["attributes"] + + def test_metrics_with_span(sentry_init, capture_envelopes): sentry_init(traces_sample_rate=1.0) envelopes = capture_envelopes()