diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9692767..37487c8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Changelog
 
+## 10.3.0 (unreleased)
+
+Features:
+
+- `Env.__repr__` and `Env.__str__` no longer display environment variables, to prevent accidental exfiltration of sensitive data ([#292](https://github.com/sloria/environs/issues/292)).
+  Thanks [mro-rhansen2](https://github.com/mro-rhansen2) for the suggestion.
+
 ## 10.2.0 (2024-01-09)
 
 Features:
diff --git a/environs/__init__.py b/environs/__init__.py
index 8ba8fd2..b52774d 100644
--- a/environs/__init__.py
+++ b/environs/__init__.py
@@ -387,7 +387,7 @@ class Env:
         self.__custom_parsers__: typing.Dict[_StrType, ParserMethod] = {}
 
     def __repr__(self) -> _StrType:
-        return f"<{self.__class__.__name__} {self._values}>"
+        return f"<{self.__class__.__name__}(eager={self.eager}, expand_vars={self.expand_vars})>"
 
     @staticmethod
     def read_env(

diff --git a/tests/test_environs.py b/tests/test_environs.py
index 2430e66..95484e9 100644
--- a/tests/test_environs.py
+++ b/tests/test_environs.py
@@ -487,15 +487,17 @@ class TestDumping:
 
 
 def test_repr(set_env, env):
+    env = environs.Env(eager=True, expand_vars=True)
     set_env({"FOO": "foo", "BAR": "42"})
     env.str("FOO")
-    assert repr(env) == "<Env {}>".format({"FOO": "foo"})
+    assert repr(env) == "<Env(eager=True, expand_vars=True)>"
 
 
 def test_str(set_env, env):
+    env = environs.Env(eager=True, expand_vars=True)
     set_env({"FOO": "foo", "BAR": "42"})
     env.str("FOO")
-    assert repr(env) == "<Env {}>".format({"FOO": "foo"})
+    assert str(env) == "<Env(eager=True, expand_vars=True)>"
 
 
 def test_env_isolation(set_env):

All environment variable names and associated values logged on unhandled env attribute error 
We had a surprise recently in our code base when an attribute error was raised on access to an `Env` instance. All environment variables and their associated values were logged to stdout which was subsequently scraped and shipped to our log analytics stack. The culprit seems to be that the `Env.__repr__` magic method deliberately stringifies the `self._values` dictionary and includes the results in the string representation of any given `Env` instance.

Was this a deliberate design decision? Environment variables are often used to handle secrets in many systems. The choice to spit all of those values out without user input seems unwise and doesn't appear to provide any immediate value to the library itself. 

There are obviously failings on our end in this. Specifically, our test suite didn't catch the issue because this particular section of the code doesn't have great coverage admittedly. Be that as it may, it doesn't seem like a sound design choice to arbitrarily leak information that is generally assumed to be sensitive, if not downright privileged, in nature.

My workaround (aside from fixing the typo in the method name) was to simply monkeypatch the `Env.__repr__` method with something that was safer and wouldn't divulge information that we don't want to appear in plain text logs in case there are any other "oopsies" in the future. If y'all are opposed to removing the stringification of the `self._values` dictionary altogether, then would y'all consider a `safe: bool = False` constructor parameter? If that variable is set to `True`, then `Env` wouldn't haphazardly report on every value within its scope. 
tests/test_environs.py::test_repr tests/test_environs.py::test_str
tests/test_environs.py::TestCasting::test_call tests/test_environs.py::TestCasting::test_call_with_default tests/test_environs.py::TestCasting::test_basic tests/test_environs.py::TestCasting::test_empty_str tests/test_environs.py::TestCasting::test_int_cast tests/test_environs.py::TestCasting::test_invalid_int tests/test_environs.py::TestCasting::test_float_cast tests/test_environs.py::TestCasting::test_list_cast tests/test_environs.py::TestCasting::test_list_with_default_from_string tests/test_environs.py::TestCasting::test_list_with_default_from_list tests/test_environs.py::TestCasting::test_list_with_subcast tests/test_environs.py::TestCasting::test_list_with_empty_env_and_subcast tests/test_environs.py::TestCasting::test_bool tests/test_environs.py::TestCasting::test_list_with_spaces tests/test_environs.py::TestCasting::test_list_with_spaces_as_delimiter tests/test_environs.py::TestCasting::test_dict tests/test_environs.py::TestCasting::test_dict_with_spaces_as_delimiter tests/test_environs.py::TestCasting::test_dict_with_subcast_values tests/test_environs.py::TestCasting::test_dict_without_subcast_keys tests/test_environs.py::TestCasting::test_dict_with_subcast_keys tests/test_environs.py::TestCasting::test_dict_with_subcast_key_deprecated tests/test_environs.py::TestCasting::test_custom_subcast_list tests/test_environs.py::TestCasting::test_custom_subcast_keys_values tests/test_environs.py::TestCasting::test_dict_with_default_from_string tests/test_environs.py::TestCasting::test_dict_with_default_from_dict tests/test_environs.py::TestCasting::test_dict_with_equal tests/test_environs.py::TestCasting::test_decimal_cast tests/test_environs.py::TestCasting::test_missing_raises_error tests/test_environs.py::TestCasting::test_default_set tests/test_environs.py::TestCasting::test_json_cast tests/test_environs.py::TestCasting::test_invalid_json_raises_error tests/test_environs.py::TestCasting::test_json_default tests/test_environs.py::TestCasting::test_datetime_cast tests/test_environs.py::TestCasting::test_date_cast tests/test_environs.py::TestCasting::test_timedelta_cast tests/test_environs.py::TestCasting::test_time_cast tests/test_environs.py::TestCasting::test_uuid_cast tests/test_environs.py::TestCasting::test_url_cast tests/test_environs.py::TestCasting::test_url_db_cast tests/test_environs.py::TestCasting::test_path_cast tests/test_environs.py::TestCasting::test_path_default_value tests/test_environs.py::TestCasting::test_log_level_cast tests/test_environs.py::TestCasting::test_invalid_log_level tests/test_environs.py::TestCasting::test_invalid_url[foo] tests/test_environs.py::TestCasting::test_invalid_url[42] tests/test_environs.py::TestCasting::test_invalid_url[foo@bar] tests/test_environs.py::TestCasting::test_enum_cast tests/test_environs.py::TestCasting::test_enum_cast_ignore_case tests/test_environs.py::TestCasting::test_invalid_enum tests/test_environs.py::TestCasting::test_invalid_enum_ignore_case tests/test_environs.py::TestEnvFileReading::test_read_env tests/test_environs.py::TestEnvFileReading::test_read_env_returns_false_if_file_not_found tests/test_environs.py::TestEnvFileReading::test_read_env_recurse tests/test_environs.py::TestEnvFileReading::test_read_env_non_recurse tests/test_environs.py::TestEnvFileReading::test_read_env_recurse_from_subfolder tests/test_environs.py::TestEnvFileReading::test_read_env_recurse_start_from_subfolder[.custom.env] tests/test_environs.py::TestEnvFileReading::test_read_env_recurse_start_from_subfolder[path1] tests/test_environs.py::TestEnvFileReading::test_read_env_directory tests/test_environs.py::TestValidation::test_can_add_validator tests/test_environs.py::TestValidation::test_can_add_marshmallow_validator tests/test_environs.py::TestValidation::test_validator_can_raise_enverror tests/test_environs.py::TestValidation::test_failed_vars_are_not_serialized tests/test_environs.py::TestCustomTypes::test_add_parser tests/test_environs.py::TestCustomTypes::test_cannot_override_built_in_parser tests/test_environs.py::TestCustomTypes::test_parser_for tests/test_environs.py::TestCustomTypes::test_parser_function_can_take_extra_arguments tests/test_environs.py::TestCustomTypes::test_add_parser_from_field tests/test_environs.py::TestDumping::test_dump tests/test_environs.py::TestDumping::test_env_with_custom_parser tests/test_environs.py::test_env_isolation tests/test_environs.py::TestPrefix::test_prefixed tests/test_environs.py::TestPrefix::test_dump_with_prefixed tests/test_environs.py::TestPrefix::test_error_message_for_prefixed_var tests/test_environs.py::TestNestedPrefix::test_nested_prefixed tests/test_environs.py::TestNestedPrefix::test_dump_with_nested_prefixed tests/test_environs.py::TestFailedNestedPrefix::test_failed_nested_prefixed tests/test_environs.py::TestFailedNestedPrefix::test_failed_dump_with_nested_prefixed tests/test_environs.py::TestDjango::test_dj_db_url tests/test_environs.py::TestDjango::test_dj_db_url_passes_kwargs tests/test_environs.py::TestDjango::test_dj_email_url tests/test_environs.py::TestDjango::test_dj_cache_url tests/test_environs.py::TestDeferredValidation::test_valid tests/test_environs.py::TestDeferredValidation::test_validation tests/test_environs.py::TestDeferredValidation::test_deferred_required_validation tests/test_environs.py::TestDeferredValidation::test_cannot_add_after_seal tests/test_environs.py::TestDeferredValidation::test_custom_parser_not_called_after_seal tests/test_environs.py::TestDeferredValidation::test_dj_db_url_with_deferred_validation_missing tests/test_environs.py::TestDeferredValidation::test_dj_db_url_with_deferred_validation_invalid tests/test_environs.py::TestDeferredValidation::test_dj_email_url_with_deferred_validation_missing tests/test_environs.py::TestDeferredValidation::test_dj_cache_url_with_deferred_validation_missing tests/test_environs.py::TestDeferredValidation::test_dj_cache_url_with_deferred_validation_invalid tests/test_environs.py::TestDeferredValidation::test_custom_parser_with_deferred_validation_missing tests/test_environs.py::TestDeferredValidation::test_custom_parser_with_deferred_validation_invalid tests/test_environs.py::TestExpandVars::test_full_expand_vars tests/test_environs.py::TestExpandVars::test_multiple_expands tests/test_environs.py::TestExpandVars::test_recursive_expands tests/test_environs.py::TestExpandVars::test_default_expands tests/test_environs.py::TestExpandVars::test_escaped_expand tests/test_environs.py::TestExpandVars::test_composite_types