diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85902be..169340c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ### 5.1.0 (unreleased)
 
+Features:
+
+- Add `env.log_level` ([#7](https://github.com/sloria/environs/issues/7)).
+
 Other changes:
 
 - Improve typings.
diff --git a/README.md b/README.md
index bca1ed1..95b41eb 100644
--- a/README.md
+++ b/README.md
@@ -54,6 +54,7 @@ export TTL=42
 export ENABLE_LOGIN=true
 export GITHUB_REPOS=webargs,konch,ped
 export COORDINATES=23.3,50.0
+export LOG_LEVEL=DEBUG
 ```
 
 Parse them with environs...
@@ -71,6 +72,7 @@ secret = env("SECRET")  # => raises error if not set
 max_connections = env.int("MAX_CONNECTIONS")  # => 100
 ship_date = env.date("SHIP_DATE")  # => datetime.date(1984, 6, 25)
 ttl = env.timedelta("TTL")  # => datetime.timedelta(0, 42)
+log_level = env.log_level("LOG_LEVEL")  # => logging.DEBUG
 
 # providing a default value
 enable_login = env.bool("ENABLE_LOGIN", False)  # => True
@@ -98,6 +100,7 @@ The following are all type-casting methods of `Env`:
 - `env.timedelta` (assumes value is an integer in seconds)
 - `env.url`
 - `env.uuid`
+- `env.log_level`
 - `env.path` (casts to a [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html))
 
 ## Reading `.env` files
diff --git a/environs.py b/environs.py
index ff4af70..91206b9 100644
--- a/environs.py
+++ b/environs.py
@@ -2,6 +2,7 @@ import contextlib
 import inspect
 import functools
 import json as pyjson
+import logging
 import os
 import re
 import typing
@@ -156,6 +157,17 @@ class PathField(ma.fields.Str):
         return Path(ret)
 
 
+class LogLevelField(ma.fields.Int):
+    def _format_num(self, value):
+        try:
+            return super()._format_num(value)
+        except (TypeError, ValueError) as error:
+            if hasattr(logging, value):
+                return getattr(logging, value)
+            else:
+                raise ma.ValidationError("Not a valid log level.") from error
+
+
 class Env:
     """An environment variable reader."""
 
@@ -173,6 +185,7 @@ class Env:
         datetime=_field2method(ma.fields.DateTime, "datetime"),
         date=_field2method(ma.fields.Date, "date"),
         path=_field2method(PathField, "path"),
+        log_level=_field2method(LogLevelField, "log_level"),
         timedelta=_field2method(ma.fields.TimeDelta, "timedelta"),
         uuid=_field2method(ma.fields.UUID, "uuid"),
         url=_field2method(URLField, "url"),

Add log_level handler
Support

```
LEVEL=DEBUG
```

```python
log_level = env.log_level('LEVEL') # => logging.DEBUG
```  
diff --git a/tests/test_environs.py b/tests/test_environs.py
index 6b67a65..eaa6956 100644
--- a/tests/test_environs.py
+++ b/tests/test_environs.py
@@ -1,5 +1,4 @@
-from __future__ import unicode_literals
-
+import logging
 import uuid
 import datetime as dt
 import urllib.parse
@@ -106,7 +105,7 @@ class TestCasting:
     def test_dict_with_default_from_dict(self, set_env, env):
         assert env.dict("DICT", {"key1": "1"}) == {"key1": "1"}
 
-    def test_decimat_cast(self, set_env, env):
+    def test_decimal_cast(self, set_env, env):
         set_env({"DECIMAL": "12.34"})
         assert env.decimal("DECIMAL") == Decimal("12.34")
 
@@ -157,6 +156,17 @@ class TestCasting:
         res = env.path("PTH")
         assert isinstance(res, pathlib.Path)
 
+    def test_log_level_cast(self, set_env, env):
+        set_env({"LOG_LEVEL": "WARNING", "LOG_LEVEL_INT": str(logging.WARNING)})
+        assert env.log_level("LOG_LEVEL_INT") == logging.WARNING
+        assert env.log_level("LOG_LEVEL") == logging.WARNING
+
+    def test_invalid_log_level(self, set_env, env):
+        set_env({"LOG_LEVEL": "INVALID"})
+        with pytest.raises(environs.EnvError) as excinfo:
+            env.log_level("LOG_LEVEL")
+        assert "Not a valid log level" in excinfo.value.args[0]
+
     @pytest.mark.parametrize("url", ["foo", "42", "foo@bar"])
     def test_invalid_url(self, url, set_env, env):
         set_env({"URL": url})
@@ -320,6 +330,7 @@ class TestDumping:
                 "DTIME": dtime.isoformat(),
                 "URLPARSE": "http://stevenloria.com/projects/?foo=42",
                 "PTH": "/home/sloria",
+                "LOG_LEVEL": "WARNING",
             }
         )
 
@@ -328,6 +339,7 @@ class TestDumping:
         env.datetime("DTIME")
         env.url("URLPARSE")
         env.path("PTH")
+        env.log_level("LOG_LEVEL")
 
         result = env.dump()
         assert result["STR"] == "foo"
@@ -338,6 +350,7 @@ class TestDumping:
         assert result["URLPARSE"] == "http://stevenloria.com/projects/?foo=42"
         assert isinstance(result["PTH"], str)
         assert result["PTH"] == str(pathlib.Path("/home/sloria"))
+        assert result["LOG_LEVEL"] == logging.WARNING
 
     def test_env_with_custom_parser(self, set_env, env):
         @env.parser_for("url")

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asgiref==3.8.1
aspy.yaml==1.3.0
attrs==25.3.0
cachetools==5.5.2
cfgv==3.4.0
chardet==5.2.0
colorama==0.4.6
distlib==0.3.9
dj-database-url==2.3.0
dj-email-url==1.0.6
Django==4.2.20
entrypoints==0.3
-e git+https://github.com/sloria/environs.git@6771e55b018644a2260d6332cd062255784fa032#egg=environs
exceptiongroup==1.2.2
filelock==3.18.0
flake8==3.7.8
flake8-bugbear==19.3.0
identify==2.6.9
iniconfig==2.1.0
marshmallow==3.26.1
mccabe==0.6.1
nodeenv==1.9.1
packaging==24.2
platformdirs==4.3.7
pluggy==1.5.0
pre-commit==1.21.0
pycodestyle==2.5.0
pyflakes==2.1.1
pyproject-api==1.9.0
pytest==8.3.5
python-dotenv==1.1.0
PyYAML==6.0.2
six==1.17.0
sqlparse==0.5.3
toml==0.10.2
tomli==2.2.1
tox==4.25.0
typing_extensions==4.13.0
virtualenv==20.29.3

name: environs
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asgiref==3.8.1
      - aspy-yaml==1.3.0
      - attrs==25.3.0
      - cachetools==5.5.2
      - cfgv==3.4.0
      - chardet==5.2.0
      - colorama==0.4.6
      - distlib==0.3.9
      - dj-database-url==2.3.0
      - dj-email-url==1.0.6
      - django==4.2.20
      - entrypoints==0.3
      - environs==5.0.0
      - exceptiongroup==1.2.2
      - filelock==3.18.0
      - flake8==3.7.8
      - flake8-bugbear==19.3.0
      - identify==2.6.9
      - iniconfig==2.1.0
      - marshmallow==3.26.1
      - mccabe==0.6.1
      - nodeenv==1.9.1
      - packaging==24.2
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pre-commit==1.21.0
      - pycodestyle==2.5.0
      - pyflakes==2.1.1
      - pyproject-api==1.9.0
      - pytest==8.3.5
      - python-dotenv==1.1.0
      - pyyaml==6.0.2
      - six==1.17.0
      - sqlparse==0.5.3
      - toml==0.10.2
      - tomli==2.2.1
      - tox==4.25.0
      - typing-extensions==4.13.0
      - virtualenv==20.29.3
prefix: /opt/conda/envs/environs

tests/test_environs.py::TestCasting::test_log_level_cast tests/test_environs.py::TestCasting::test_invalid_log_level tests/test_environs.py::TestDumping::test_dump
tests/test_environs.py::TestEnvFileReading::test_read_env_not_found_with_verbose_warns
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_bool tests/test_environs.py::TestCasting::test_list_with_spaces tests/test_environs.py::TestCasting::test_dict tests/test_environs.py::TestCasting::test_dict_with_subcast 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_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_datetime_cast tests/test_environs.py::TestCasting::test_date_cast tests/test_environs.py::TestCasting::test_timedelta_cast tests/test_environs.py::TestCasting::test_uuid_cast tests/test_environs.py::TestCasting::test_url_cast tests/test_environs.py::TestCasting::test_path_cast 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::TestProxiedVariables::test_reading_proxied_variable tests/test_environs.py::TestProxiedVariables::test_reading_missing_proxied_variable tests/test_environs.py::TestProxiedVariables::test_reading_proxied_variable_in_prefix_scope tests/test_environs.py::TestEnvFileReading::test_read_env 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_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_env_with_custom_parser tests/test_environs.py::test_repr tests/test_environs.py::test_str 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::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
README.md CHANGELOG.md environs.py
README.md CHANGELOG.md environs.py