diff --git a/mmengine/runner/log_processor.py b/mmengine/runner/log_processor.py
index 1259b5cc94db3caf177789310c3633db5db6bc79..75047b373396f556948967f0e725a73eb2726753 100644
--- a/mmengine/runner/log_processor.py
+++ b/mmengine/runner/log_processor.py
@@ -341,6 +341,7 @@ class LogProcessor:
         Returns:
             dict: Statistical values of logs.
         """
+        custom_cfg = copy.deepcopy(custom_cfg)
         tag = OrderedDict()
         # history_scalars of train/val/test phase.
         history_scalars = runner.message_hub.log_scalars
diff --git a/tests/test_runner/test_log_processor.py b/tests/test_runner/test_log_processor.py
index ac6ff91c89a30758ef985e5b6264387f3ae3592a..8a51c5c1cc92f6cdeced8c0ee42811bf91e70f04 100644
--- a/tests/test_runner/test_log_processor.py
+++ b/tests/test_runner/test_log_processor.py
@@ -5,12 +5,14 @@ from unittest.mock import MagicMock, patch
 import numpy as np
 import pytest
 import torch
+from parameterized import parameterized
 
 from mmengine.logging import HistoryBuffer, MessageHub, MMLogger
 from mmengine.runner import LogProcessor
+from mmengine.testing import RunnerTestCase
 
 
-class TestLogProcessor:
+class TestLogProcessor(RunnerTestCase):
 
     def test_init(self):
         log_processor = LogProcessor(
@@ -69,12 +71,13 @@ class TestLogProcessor:
         with pytest.raises(TypeError):
             log_processor._parse_windows_size(self.runner, 1, custom_cfg)
 
-    @pytest.mark.parametrize(
-        'by_epoch,mode,log_with_hierarchy',
+    # yapf: disable
+    @parameterized.expand(
         ([True, 'train', True], [True, 'train', False], [False, 'train', True],
          [False, 'train', False], [True, 'val', True], [True, 'val', False],
          [False, 'val', True], [False, 'val', False], [True, 'test', True],
          [True, 'test', False], [False, 'test', True], [False, 'test', False]))
+    # yapf: enable
     def test_get_log_after_iter(self, by_epoch, mode, log_with_hierarchy):
         # Prepare LoggerHook
         log_processor = LogProcessor(
@@ -141,8 +144,7 @@ class TestLogProcessor:
                 log_str += f"loss_cls: {train_logs['loss_cls']:.4f}"
             assert out == log_str
 
-    @pytest.mark.parametrize(
-        'by_epoch,mode,log_with_hierarchy',
+    @parameterized.expand(
         ([True, 'val', True], [True, 'val', False], [False, 'val', True],
          [False, 'val', False], [True, 'test', True], [False, 'test', False]))
     def test_log_val(self, by_epoch, mode, log_with_hierarchy):
@@ -188,7 +190,7 @@ class TestLogProcessor:
         custom_cfg = [
             dict(data_src='time', method_name='max', log_name='time_max')
         ]
-        logger_hook = LogProcessor(custom_cfg=custom_cfg)
+        log_processor = LogProcessor(custom_cfg=custom_cfg)
         # Collect with prefix.
         log_scalars = {
             'train/time': history_time_buffer,
@@ -197,7 +199,7 @@ class TestLogProcessor:
             'val/metric': history_metric_buffer
         }
         self.runner.message_hub._log_scalars = log_scalars
-        tag = logger_hook._collect_scalars(
+        tag = log_processor._collect_scalars(
             copy.deepcopy(custom_cfg), self.runner, mode='train')
         # Test training key in tag.
         assert list(tag.keys()) == ['time', 'loss_cls', 'time_max']
@@ -206,7 +208,7 @@ class TestLogProcessor:
         assert tag['time_max'] == time_scalars.max()
         assert tag['loss_cls'] == loss_cls_scalars[-10:].mean()
 
-        tag = logger_hook._collect_scalars(
+        tag = log_processor._collect_scalars(
             copy.deepcopy(custom_cfg), self.runner, mode='val')
         assert list(tag.keys()) == ['metric']
         assert tag['metric'] == metric_scalars[-1]
@@ -268,7 +270,7 @@ class TestLogProcessor:
         loop = log_processor._get_cur_loop(self.runner, 'test')
         assert len(loop.dataloader) == 5
 
-    def setup_method(self):
+    def setUp(self):
         runner = MagicMock()
         runner.epoch = 1
         runner.max_epochs = 10
@@ -289,3 +291,36 @@ class TestLogProcessor:
             message_hub.update_scalar('val/acc', i * 0.1)
         runner.message_hub = message_hub
         self.runner = runner
+        super().setUp()
+
+    def test_with_runner(self):
+        cfg = self.epoch_based_cfg.copy()
+        cfg.log_processor = dict(
+            custom_cfg=[
+                dict(
+                    data_src='time',
+                    window_size='epoch',
+                    log_name='iter_time',
+                    method_name='mean')
+            ],
+            log_with_hierarchy=True)
+        runner = self.build_runner(cfg)
+        runner.train()
+        runner.val()
+        runner.test()
+
+        cfg = self.iter_based_cfg.copy()
+        cfg.log_processor = dict(
+            by_epoch=False,
+            custom_cfg=[
+                dict(
+                    data_src='time',
+                    window_size=100,
+                    log_name='iter_time',
+                    method_name='mean')
+            ],
+            log_with_hierarchy=True)
+        runner = self.build_runner(cfg)
+        runner.train()
+        runner.val()
+        runner.test()