diff --git a/doc/users/config_file.rst b/doc/users/config_file.rst
index 279dc1aad..8d296556c 100644
--- a/doc/users/config_file.rst
+++ b/doc/users/config_file.rst
@@ -237,16 +237,23 @@ Debug configuration
 
 To enable debug mode, one can insert the following lines::
 
-  from nipype import config, logging
+  from nipype import config
   config.enable_debug_mode()
-  logging.update_logging(config)
 
 In this mode the following variables are set::
 
   config.set('execution', 'stop_on_first_crash', 'true')
   config.set('execution', 'remove_unnecessary_outputs', 'false')
+  config.set('execution', 'keep_inputs', 'true')
   config.set('logging', 'workflow_level', 'DEBUG')
   config.set('logging', 'interface_level', 'DEBUG')
+  config.set('logging', 'utils_level', 'DEBUG')
+
+The primary loggers (``workflow``, ``interface`` and ``utils``) are also reset
+to level ``DEBUG``.
+You may wish to adjust these manually using::
 
+  from nipype import logging
+  logging.getLogger(<logger>).setLevel(<level>)
 
 .. include:: ../links_names.txt
diff --git a/doc/users/debug.rst b/doc/users/debug.rst
index d5064fd37..fcaa79ea4 100644
--- a/doc/users/debug.rst
+++ b/doc/users/debug.rst
@@ -20,15 +20,17 @@ performance issues.
       from nipype import config
       config.enable_debug_mode()
 
-   as the first import of your nipype script. To enable debug logging use::
-
-       from nipype import logging
-       logging.update_logging(config)
+   as the first import of your nipype script.
 
    .. note::
 
-     Turning on debug will rerun your workflows and will rerun them after debugging
-     is turned off.
+     Turning on debug will rerun your workflows and will rerun them after
+     debugging is turned off.
+
+     Turning on debug mode will also override log levels specified elsewhere,
+     such as in the nipype configuration.
+     ``workflow``, ``interface`` and ``utils`` loggers will all be set to
+     level ```DEBUG``.
 
 #. There are several configuration options that can help with debugging. See
    :ref:`config_file` for more details::
diff --git a/nipype/utils/config.py b/nipype/utils/config.py
index 30b826d23..843748dfe 100644
--- a/nipype/utils/config.py
+++ b/nipype/utils/config.py
@@ -147,11 +147,14 @@ class NipypeConfig(object):
 
     def enable_debug_mode(self):
         """Enables debug configuration"""
+        from .. import logging
         self._config.set('execution', 'stop_on_first_crash', 'true')
         self._config.set('execution', 'remove_unnecessary_outputs', 'false')
         self._config.set('execution', 'keep_inputs', 'true')
         self._config.set('logging', 'workflow_level', 'DEBUG')
         self._config.set('logging', 'interface_level', 'DEBUG')
+        self._config.set('logging', 'utils_level', 'DEBUG')
+        logging.update_logging(self._config)
 
     def set_log_dir(self, log_dir):
         """Sets logging directory

config.enable_debug_mode() does not work as advertised
config.enable_debug_mode() is not equivalent to:

```
mkdir ~/.nipype
echo "[logging]" > ~/.nipype/nipype.cfg
echo "workflow_level = DEBUG" ~/.nipype/nipype.cfg
echo "interface_level = DEBUG" >> ~/.nipype/nipype.cfg
echo "filemanip_level = DEBUG" >> ~/.nipype/nipype.cfg
```

diff --git a/nipype/utils/tests/test_config.py b/nipype/utils/tests/test_config.py
index 65ada4c64..38a55b6a0 100644
--- a/nipype/utils/tests/test_config.py
+++ b/nipype/utils/tests/test_config.py
@@ -241,3 +241,52 @@ def test_cwd_cached(tmpdir):
     oldcwd = config.cwd
     tmpdir.chdir()
     assert config.cwd == oldcwd
+
+
+def test_debug_mode():
+    from ... import logging
+
+    sofc_config = config.get('execution', 'stop_on_first_crash')
+    ruo_config = config.get('execution', 'remove_unnecessary_outputs')
+    ki_config = config.get('execution', 'keep_inputs')
+    wf_config = config.get('logging', 'workflow_level')
+    if_config = config.get('logging', 'interface_level')
+    ut_config = config.get('logging', 'utils_level')
+
+    wf_level = logging.getLogger('workflow').level
+    if_level = logging.getLogger('interface').level
+    ut_level = logging.getLogger('utils').level
+
+    config.enable_debug_mode()
+
+    # Check config is updated and logging levels, too
+    assert config.get('execution', 'stop_on_first_crash') == 'true'
+    assert config.get('execution', 'remove_unnecessary_outputs') == 'false'
+    assert config.get('execution', 'keep_inputs') == 'true'
+    assert config.get('logging', 'workflow_level') == 'DEBUG'
+    assert config.get('logging', 'interface_level') == 'DEBUG'
+    assert config.get('logging', 'utils_level') == 'DEBUG'
+
+    assert logging.getLogger('workflow').level == 10
+    assert logging.getLogger('interface').level == 10
+    assert logging.getLogger('utils').level == 10
+
+    # Restore config and levels
+    config.set('execution', 'stop_on_first_crash', sofc_config)
+    config.set('execution', 'remove_unnecessary_outputs', ruo_config)
+    config.set('execution', 'keep_inputs', ki_config)
+    config.set('logging', 'workflow_level', wf_config)
+    config.set('logging', 'interface_level', if_config)
+    config.set('logging', 'utils_level', ut_config)
+    logging.update_logging(config)
+
+    assert config.get('execution', 'stop_on_first_crash') == sofc_config
+    assert config.get('execution', 'remove_unnecessary_outputs') == ruo_config
+    assert config.get('execution', 'keep_inputs') == ki_config
+    assert config.get('logging', 'workflow_level') == wf_config
+    assert config.get('logging', 'interface_level') == if_config
+    assert config.get('logging', 'utils_level') == ut_config
+
+    assert logging.getLogger('workflow').level == wf_level
+    assert logging.getLogger('interface').level == if_level
+    assert logging.getLogger('utils').level == ut_level

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
attrs==22.2.0
Babel==2.11.0
certifi==2021.5.30
charset-normalizer==2.0.12
click==8.0.4
codecov==2.1.13
configparser==5.2.0
coverage==6.2
cycler==0.11.0
decorator==4.4.2
docutils==0.18.1
execnet==1.9.0
funcsigs==1.0.2
future==1.0.0
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
iniconfig==1.1.1
isodate==0.6.1
Jinja2==3.0.3
kiwisolver==1.3.1
lxml==5.3.1
MarkupSafe==2.0.1
matplotlib==3.3.4
mock==5.2.0
networkx==2.5.1
nibabel==3.2.2
-e git+https://github.com/nipy/nipype.git@9eaa2a32c8cb3569633a79d6f7968270453f9aed#egg=nipype
numpy==1.19.5
numpydoc==1.1.0
packaging==21.3
Pillow==8.4.0
pluggy==1.0.0
prov==1.5.0
py==1.11.0
pydot==1.4.2
pydotplus==2.0.2
Pygments==2.14.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
pytest-env==0.6.2
pytest-xdist==3.0.2
python-dateutil==2.9.0.post0
pytz==2025.2
rdflib==5.0.0
requests==2.27.1
scipy==1.5.4
simplejson==3.20.1
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
tomli==1.2.3
traits==6.4.1
typing_extensions==4.1.1
urllib3==1.26.20
yapf==0.32.0
zipp==3.6.0

name: nipype
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
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - 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=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - attrs==22.2.0
      - babel==2.11.0
      - charset-normalizer==2.0.12
      - click==8.0.4
      - codecov==2.1.13
      - configparser==5.2.0
      - coverage==6.2
      - cycler==0.11.0
      - decorator==4.4.2
      - docutils==0.18.1
      - execnet==1.9.0
      - funcsigs==1.0.2
      - future==1.0.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - isodate==0.6.1
      - jinja2==3.0.3
      - kiwisolver==1.3.1
      - lxml==5.3.1
      - markupsafe==2.0.1
      - matplotlib==3.3.4
      - mock==5.2.0
      - networkx==2.5.1
      - nibabel==3.2.2
      - numpy==1.19.5
      - numpydoc==1.1.0
      - packaging==21.3
      - pillow==8.4.0
      - pluggy==1.0.0
      - prov==1.5.0
      - py==1.11.0
      - pydot==1.4.2
      - pydotplus==2.0.2
      - pygments==2.14.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-env==0.6.2
      - pytest-xdist==3.0.2
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - rdflib==5.0.0
      - requests==2.27.1
      - scipy==1.5.4
      - simplejson==3.20.1
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - tomli==1.2.3
      - traits==6.4.1
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - yapf==0.32.0
      - zipp==3.6.0
prefix: /opt/conda/envs/nipype

nipype/utils/tests/test_config.py::test_debug_mode
nipype/utils/tests/test_config.py::test_display_parse[localhost:12] nipype/utils/tests/test_config.py::test_cwd_cached nipype/utils/tests/test_config.py::test_display_parse[localhost:12.1] nipype/utils/tests/test_config.py::test_display_config[1] nipype/utils/tests/test_config.py::test_display_noconfig_nosystem_patched_oldxvfbwrapper nipype/utils/tests/test_config.py::test_display_system[2] nipype/utils/tests/test_config.py::test_display_system[3] nipype/utils/tests/test_config.py::test_display_noconfig_nosystem_patched nipype/utils/tests/test_config.py::test_display_config[2] nipype/utils/tests/test_config.py::test_display_empty_patched_oldxvfbwrapper nipype/utils/tests/test_config.py::test_display_system[4] nipype/utils/tests/test_config.py::test_display_parse[:12] nipype/utils/tests/test_config.py::test_display_noconfig_nosystem_notinstalled nipype/utils/tests/test_config.py::test_display_empty_notinstalled nipype/utils/tests/test_config.py::test_display_config_and_system nipype/utils/tests/test_config.py::test_display_config[3] nipype/utils/tests/test_config.py::test_display_empty_macosx nipype/utils/tests/test_config.py::test_display_system[1] nipype/utils/tests/test_config.py::test_display_system[0] nipype/utils/tests/test_config.py::test_display_config[0] nipype/utils/tests/test_config.py::test_display_empty_patched nipype/utils/tests/test_config.py::test_display_config[4]
doc/users/debug.rst nipype/utils/config.py doc/users/config_file.rst
doc/users/debug.rst nipype/utils/config.py doc/users/config_file.rst