diff --git a/pysnooper/tracer.py b/pysnooper/tracer.py
index cc6a90d..9ad85c9 100644
--- a/pysnooper/tracer.py
+++ b/pysnooper/tracer.py
@@ -213,6 +213,8 @@ class Tracer:
 
         self.write('{indent}{now_string} {event:9} '
                    '{line_no:4} {source_line}'.format(**locals()))
+        if event == 'return':
+            self.write('{indent}{now_string} return_value {line_no:4} {arg}'.format(**locals()))
         return self.trace
 
 

Feature request: Show the return value
diff --git a/tests/test_pysnooper.py b/tests/test_pysnooper.py
index 4ba26c4..d0ff913 100644
--- a/tests/test_pysnooper.py
+++ b/tests/test_pysnooper.py
@@ -12,7 +12,7 @@ from python_toolbox import temp_file_tools
 import pysnooper
 
 from .utils import (assert_output, VariableEntry, CallEntry, LineEntry,
-                    ReturnEntry, OpcodeEntry, ExceptionEntry)
+                    ReturnEntry, OpcodeEntry, Return_valueEntry, ExceptionEntry)
 
 
 def test_string_io():
@@ -36,6 +36,7 @@ def test_string_io():
             VariableEntry('y', '8'),
             LineEntry('return y + x'),
             ReturnEntry('return y + x'),
+            Return_valueEntry('15'),
         )
     )
 
@@ -78,6 +79,7 @@ def test_variables():
             VariableEntry('foo.x', '16'),
             LineEntry(),
             ReturnEntry(),
+            Return_valueEntry('None')
         )
     )
 
@@ -125,14 +127,17 @@ def test_depth():
             VariableEntry(),
             LineEntry(),
             ReturnEntry(),
+            Return_valueEntry('20'),
 
             VariableEntry(),
             LineEntry(),
             ReturnEntry(),
+            Return_valueEntry('20'),
 
             VariableEntry(),
             LineEntry(),
             ReturnEntry(),
+            Return_valueEntry('20'),
         )
     )
 
@@ -167,6 +172,7 @@ def test_method_and_prefix():
             LineEntry('self.x **= 2'),
             LineEntry(),
             ReturnEntry(),
+            Return_valueEntry(),
         ),
         prefix='ZZZ'
     )
@@ -194,6 +200,7 @@ def test_file_output():
                 VariableEntry('y', '8'),
                 LineEntry('return y + x'),
                 ReturnEntry('return y + x'),
+                Return_valueEntry('15'),
             )
         )
 
@@ -229,8 +236,10 @@ def test_confusing_decorator_lines():
             CallEntry('x = lambda bar: 7'),
             LineEntry(),
             ReturnEntry(),
+            Return_valueEntry('7'),
             # back in my_function
             ReturnEntry(),
+            Return_valueEntry('15'),
         )
     )
 
@@ -248,5 +257,6 @@ def test_lambda():
             CallEntry(source_regex='^my_function = pysnooper.*'),
             LineEntry(source_regex='^my_function = pysnooper.*'),
             ReturnEntry(source_regex='^my_function = pysnooper.*'),
+            Return_valueEntry('49'),
         )
     )
diff --git a/tests/utils.py b/tests/utils.py
index fc8242a..f704215 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -81,13 +81,13 @@ class _BaseEventEntry(_BaseEntry):
 
     line_pattern = re.compile(
         (r"""^(?P<prefix>.*?)(?P<indent>(?: {4})*)[0-9:.]{15} """
-         r"""(?P<event_name>[a-z]*) +(?P<line_number>[0-9]*) """
+         r"""(?P<event_name>[a-z_]*) +(?P<line_number>[0-9]*) """
          r"""+(?P<source>.*)$""")
     )
 
     @caching.CachedProperty
     def event_name(self):
-        return re.match('^[A-Z][a-z]*', type(self).__name__).group(0).lower()
+        return re.match('^[A-Z][a-z_]*', type(self).__name__).group(0).lower()
 
     def _check_source(self, source):
         if self.source is not None:
@@ -121,6 +121,8 @@ class ExceptionEntry(_BaseEventEntry):
 class OpcodeEntry(_BaseEventEntry):
     pass
 
+class Return_valueEntry(_BaseEventEntry):
+    pass
 
 class OutputFailure(Exception):
     pass

pip install -e .
parse_log_pytest
requirements.txt
pytest python_toolbox
apt-get update apt-get install -y gcc
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
decorator==4.4.0
exceptiongroup==1.2.2
importlib-metadata==6.7.0
iniconfig==2.0.0
packaging==24.0
pluggy==1.2.0
-e git+https://github.com/cool-RR/PySnooper.git@43af67b1d96f4d7fad727982c33ab7923155f08e#egg=PySnooper
pytest==7.4.4
python_toolbox==1.2.3
six==1.12.0
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0

name: PySnooper
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=2022.12.7=py37h06a4308_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=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - decorator==4.4.0
      - exceptiongroup==1.2.2
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - packaging==24.0
      - pluggy==1.2.0
      - pytest==7.4.4
      - python-toolbox==1.2.3
      - six==1.12.0
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/PySnooper

tests/test_pysnooper.py::test_string_io tests/test_pysnooper.py::test_variables tests/test_pysnooper.py::test_depth tests/test_pysnooper.py::test_method_and_prefix tests/test_pysnooper.py::test_file_output tests/test_pysnooper.py::test_confusing_decorator_lines tests/test_pysnooper.py::test_lambda
pysnooper/tracer.py
pysnooper/tracer.py