[fuchsia] Fix the log collection step

There's no need to specify the emulator log path as we're using an
isolated config, we can simply read the log files directly. This does that and remove the explicit call to `ffx log dump`. It often happens that we need the logs because the ffx connection has dropped, reading the log files directly will help debug these issues.

led run:  https://ci.chromium.org/swarming/task/60f732f302e8bc10?server=chromium-swarm.appspot.com

Change-Id: Ibc93b86515839fdcde942bf973401741108d9e8d
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/40361
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Sébastien Marchand <sebmarchand@google.com>
diff --git a/recipes/engine/femu_test.expected/arm64_emulator_arch.json b/recipes/engine/femu_test.expected/arm64_emulator_arch.json
index c6ab165..17e6be4 100644
--- a/recipes/engine/femu_test.expected/arm64_emulator_arch.json
+++ b/recipes/engine/femu_test.expected/arm64_emulator_arch.json
@@ -1598,9 +1598,7 @@
       "qemu",
       "--headless",
       "--startup-timeout",
-      "360",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "360"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1773,10 +1771,30 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on arm64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
     "cmd": [
-      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
-      "log",
-      "dump"
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1796,11 +1814,119 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on arm64.run v2_test.ffx log dump",
+    "infra_step": true,
+    "name": "run FEMU test on arm64.run v2_test.logs.read ffx daemon log",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@emulator_log@log@@@",
-      "@@@STEP_LOG_END@emulator_log@@@"
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on arm64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on arm64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on arm64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
     ]
   },
   {
@@ -1826,9 +1952,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on arm64.run v2_test.kill fserve",
+    "name": "run FEMU test on arm64.run v2_test.logs.kill fserve",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -1857,9 +1983,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on arm64.run v2_test.stop arm64 emulator",
+    "name": "run FEMU test on arm64.run v2_test.logs.stop arm64 emulator",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
diff --git a/recipes/engine/femu_test.expected/femu_with_package_list.json b/recipes/engine/femu_test.expected/femu_with_package_list.json
index fe9cc97..0391f68 100644
--- a/recipes/engine/femu_test.expected/femu_with_package_list.json
+++ b/recipes/engine/femu_test.expected/femu_with_package_list.json
@@ -1611,9 +1611,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1757,6 +1755,224 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/fserve",
+      "-kill"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.kill fserve",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
+      "-v",
+      "emu",
+      "stop",
+      "--all"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.stop x64 emulator",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
     "failure": {
       "failure": {},
       "humanReason": "Step('run FEMU test on x64.run v2_test.publishing v2_test-123.far') (retcode: 1)"
diff --git a/recipes/engine/femu_test.expected/invalid_emulator_arch.json b/recipes/engine/femu_test.expected/invalid_emulator_arch.json
index cd2d4ce..4084283 100644
--- a/recipes/engine/femu_test.expected/invalid_emulator_arch.json
+++ b/recipes/engine/femu_test.expected/invalid_emulator_arch.json
@@ -1587,9 +1587,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1762,10 +1760,30 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
     "cmd": [
-      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
-      "log",
-      "dump"
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1785,11 +1803,119 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run v2_test.ffx log dump",
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@emulator_log@log@@@",
-      "@@@STEP_LOG_END@emulator_log@@@"
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
     ]
   },
   {
@@ -1815,9 +1941,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run v2_test.kill fserve",
+    "name": "run FEMU test on x64.run v2_test.logs.kill fserve",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -1846,9 +1972,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run v2_test.stop x64 emulator",
+    "name": "run FEMU test on x64.run v2_test.logs.stop x64 emulator",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
diff --git a/recipes/engine/femu_test.expected/multiple_non_root_fars.json b/recipes/engine/femu_test.expected/multiple_non_root_fars.json
index 60a444a..d7ebacf 100644
--- a/recipes/engine/femu_test.expected/multiple_non_root_fars.json
+++ b/recipes/engine/femu_test.expected/multiple_non_root_fars.json
@@ -1601,9 +1601,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1747,6 +1745,224 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs.read ffx daemon log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/fserve",
+      "-kill"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs.kill fserve",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
+      "-v",
+      "emu",
+      "stop",
+      "--all"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run flutter-embedder-test.logs.stop x64 emulator",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
     "failure": {
       "failure": {},
       "humanReason": "Step('run FEMU test on x64.run flutter-embedder-test.publishing flutter-embedder-test-0.far') (retcode: 1)"
diff --git a/recipes/engine/femu_test.expected/no_zircon_file.json b/recipes/engine/femu_test.expected/no_zircon_file.json
index cd2d4ce..4084283 100644
--- a/recipes/engine/femu_test.expected/no_zircon_file.json
+++ b/recipes/engine/femu_test.expected/no_zircon_file.json
@@ -1587,9 +1587,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1762,10 +1760,30 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
     "cmd": [
-      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
-      "log",
-      "dump"
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1785,11 +1803,119 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run v2_test.ffx log dump",
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@emulator_log@log@@@",
-      "@@@STEP_LOG_END@emulator_log@@@"
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
     ]
   },
   {
@@ -1815,9 +1941,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run v2_test.kill fserve",
+    "name": "run FEMU test on x64.run v2_test.logs.kill fserve",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -1846,9 +1972,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run v2_test.stop x64 emulator",
+    "name": "run FEMU test on x64.run v2_test.logs.stop x64 emulator",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
diff --git a/recipes/engine/femu_test.expected/run_on_test_specified_arch.json b/recipes/engine/femu_test.expected/run_on_test_specified_arch.json
index 53c26cb..883a22c 100644
--- a/recipes/engine/femu_test.expected/run_on_test_specified_arch.json
+++ b/recipes/engine/femu_test.expected/run_on_test_specified_arch.json
@@ -1625,9 +1625,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1828,10 +1826,30 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run run-on-both-arch.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
     "cmd": [
-      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
-      "log",
-      "dump"
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1851,11 +1869,119 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run run-on-both-arch.ffx log dump",
+    "infra_step": true,
+    "name": "run FEMU test on x64.run run-on-both-arch.logs.read ffx daemon log",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@emulator_log@log@@@",
-      "@@@STEP_LOG_END@emulator_log@@@"
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run run-on-both-arch.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run run-on-both-arch.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run run-on-both-arch.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
     ]
   },
   {
@@ -1881,9 +2007,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run run-on-both-arch.kill fserve",
+    "name": "run FEMU test on x64.run run-on-both-arch.logs.kill fserve",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
@@ -1912,9 +2038,9 @@
         "RECIPE_REPO[depot_tools]"
       ]
     },
-    "name": "run FEMU test on x64.run run-on-both-arch.stop x64 emulator",
+    "name": "run FEMU test on x64.run run-on-both-arch.logs.stop x64 emulator",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_NEST_LEVEL@3@@@"
     ]
   },
   {
diff --git a/recipes/engine/femu_test.expected/run_with_dart_aot_behavior.json b/recipes/engine/femu_test.expected/run_with_dart_aot_behavior.json
index 71c7a47..745f5a7 100644
--- a/recipes/engine/femu_test.expected/run_with_dart_aot_behavior.json
+++ b/recipes/engine/femu_test.expected/run_with_dart_aot_behavior.json
@@ -1604,9 +1604,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1778,6 +1776,224 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs.read ffx daemon log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/fserve",
+      "-kill"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs.kill fserve",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
+      "-v",
+      "emu",
+      "stop",
+      "--all"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run dart-jit-runner-integration-test.logs.stop x64 emulator",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
     "failure": {
       "failure": {},
       "humanReason": "Step('run FEMU test on x64.run dart-jit-runner-integration-test.publishing dart_aot_runner-0.far') (retcode: 1)"
diff --git a/recipes/engine/femu_test.expected/start_femu.json b/recipes/engine/femu_test.expected/start_femu.json
index d647742..eedf728 100644
--- a/recipes/engine/femu_test.expected/start_femu.json
+++ b/recipes/engine/femu_test.expected/start_femu.json
@@ -1603,9 +1603,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1632,6 +1630,224 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/fserve",
+      "-kill"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.kill fserve",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
+      "-v",
+      "emu",
+      "stop",
+      "--all"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.stop x64 emulator",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
     "failure": {
       "failure": {},
       "humanReason": "Step('run FEMU test on x64.run v2_test.launch x64 emulator') (retcode: 1)"
diff --git a/recipes/engine/femu_test.expected/start_femu_with_cso.json b/recipes/engine/femu_test.expected/start_femu_with_cso.json
index 808ce80..9574647 100644
--- a/recipes/engine/femu_test.expected/start_femu_with_cso.json
+++ b/recipes/engine/femu_test.expected/start_femu_with_cso.json
@@ -1603,9 +1603,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1632,6 +1630,224 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/fserve",
+      "-kill"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.kill fserve",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
+      "-v",
+      "emu",
+      "stop",
+      "--all"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.stop x64 emulator",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
     "failure": {
       "failure": {},
       "humanReason": "Step('run FEMU test on x64.run v2_test.launch x64 emulator') (retcode: 1)"
diff --git a/recipes/engine/femu_test.expected/start_femu_with_override_pbm.json b/recipes/engine/femu_test.expected/start_femu_with_override_pbm.json
index 563e7b2..7aceff7 100644
--- a/recipes/engine/femu_test.expected/start_femu_with_override_pbm.json
+++ b/recipes/engine/femu_test.expected/start_femu_with_override_pbm.json
@@ -1634,9 +1634,7 @@
       "emu",
       "start",
       "terminal.qemu-x64",
-      "--headless",
-      "--log",
-      "[CLEANUP]/emulator_log_tmp_1"
+      "--headless"
     ],
     "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
     "env": {
@@ -1663,6 +1661,224 @@
     ]
   },
   {
+    "cmd": [],
+    "name": "run FEMU test on x64.run v2_test.logs",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@ffx_daemon_log@@@@",
+      "@@@STEP_LOG_END@ffx_daemon_log@@@",
+      "@@@STEP_LOG_LINE@ffx_log@@@@",
+      "@@@STEP_LOG_END@ffx_log@@@",
+      "@@@STEP_LOG_LINE@emulator_log@@@@",
+      "@@@STEP_LOG_END@emulator_log@@@",
+      "@@@STEP_LOG_LINE@emulator_serial_log@@@@",
+      "@@@STEP_LOG_END@emulator_serial_log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.daemon.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.daemon.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/cache/logs/ffx.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx log",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@ffx.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CLEANUP]/ffx_isolate_files_tmp_1/data/emu/instances/fuchsia-emulator/emulator.log.serial",
+      "/path/to/tmp/"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "infra_step": true,
+    "name": "run FEMU test on x64.run v2_test.logs.read ffx daemon log (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@",
+      "@@@STEP_LOG_END@emulator.log.serial@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/fserve",
+      "-kill"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.kill fserve",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[CACHE]/builder/src/fuchsia/sdk/linux/tools/x64/ffx",
+      "-v",
+      "emu",
+      "stop",
+      "--all"
+    ],
+    "cwd": "[CLEANUP]/femu_runfiles__tmp_1",
+    "env": {
+      "FFX_ISOLATE_DIR": "[CLEANUP]/ffx_isolate_files_tmp_1",
+      "GOMA_DIR": "[CACHE]/goma/client"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "env_suffixes": {
+      "DEPOT_TOOLS_UPDATE": [
+        "0"
+      ],
+      "PATH": [
+        "RECIPE_REPO[depot_tools]"
+      ]
+    },
+    "name": "run FEMU test on x64.run v2_test.logs.stop x64 emulator",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@3@@@"
+    ]
+  },
+  {
     "failure": {
       "failure": {},
       "humanReason": "Step('run FEMU test on x64.run v2_test.launch x64 emulator') (retcode: 1)"
diff --git a/recipes/engine/femu_test.py b/recipes/engine/femu_test.py
index 8d8ff3c..947b686 100644
--- a/recipes/engine/femu_test.py
+++ b/recipes/engine/femu_test.py
@@ -248,65 +248,88 @@
   with api.context(cwd=root_dir), api.step.nest('run FEMU test on %s' % arch):
     for suite in test_suites:
       with api.step.nest('run %s' % suite['name']):
-        # Launch the emulator
-        # Route the emulator_log to a temporary, defined path to output later
-        emulator_log_path = api.path.mkstemp('emulator_log')
-        if arch == 'arm64':
-          launch_step = api.step(
-              'launch arm64 emulator with QEMU engine', [
-                  ffx, '-v', 'emu', 'start', 'terminal.qemu-arm64', '--engine',
-                  'qemu', '--headless', '--startup-timeout', '360', '--log',
-                  api.raw_io.output_text(
-                      name='emulator_log', leak_to=emulator_log_path)
-              ],
-              step_test_data=(lambda: api.raw_io.test_api.output_text(
-                  'log', name='emulator_log')))
-        else:
-          launch_step = api.step(
-              'launch x64 emulator', [
-                  ffx, '-v', 'emu', 'start', 'terminal.qemu-x64', '--headless',
-                  '--log',
-                  api.raw_io.output_text(
-                      name='emulator_log', leak_to=emulator_log_path)
-              ],
-              step_test_data=(lambda: api.raw_io.test_api.output_text(
-                  'log', name='emulator_log')))
+        try:
+          # Launch the emulator
+          if arch == 'arm64':
+            launch_step = api.step(
+                'launch arm64 emulator with QEMU engine', [
+                    ffx, '-v', 'emu', 'start', 'terminal.qemu-arm64',
+                    '--engine', 'qemu', '--headless', '--startup-timeout', '360'
+                ]
+            )
+          else:
+            launch_step = api.step(
+                'launch x64 emulator',
+                [ffx, '-v', 'emu', 'start', 'terminal.qemu-x64', '--headless']
+            )
 
-        # Output information for current emulator
-        # Contains version, product information, etc.
-        api.step('list all targets in the collection', [ffx, 'target', 'list'])
-        api.step('retrieve femu information', [ffx, 'target', 'show']);
+          # Output information for current emulator
+          # Contains version, product information, etc.
+          api.step(
+              'list all targets in the collection', [ffx, 'target', 'list']
+          )
+          api.step('retrieve femu information', [ffx, 'target', 'show'])
 
-        # Start a package server, this listens in the background for published files
-        # https://fuchsia.dev/reference/tools/sdk/fserve
-        api.step(
-            'start fserve',
-            [fserve, '-image',
-              'qemu-%s' % arch, '-server-port', FSERVE_PORT])
+          # Start a package server, this listens in the background for published files
+          # https://fuchsia.dev/reference/tools/sdk/fserve
+          api.step(
+              'start fserve',
+              [fserve, '-image',
+               'qemu-%s' % arch, '-server-port', FSERVE_PORT]
+          )
 
-        # Publishes the required FAR files needed to run the test to the package server
-        # https://fuchsia.dev/reference/tools/sdk/fpublish
-        for package in suite['package_basenames']:
-          api.step('publishing {}'.format(package), [fpublish, package])
+          # Publishes the required FAR files needed to run the test to the package server
+          # https://fuchsia.dev/reference/tools/sdk/fpublish
+          for package in suite['package_basenames']:
+            api.step('publishing {}'.format(package), [fpublish, package])
 
-        # Run the actual test
-        # Test command is guaranteed to be well-formed
-        # TODO(http://fxb/121613): Emulator instances are not cleaned up
-        # when tests fail. Added a clean up step before tests start to
-        # stop all running emulators.
-        with api.step.defer_results():
-          api.retry.step('run ffx test', [ffx] + suite['test_command'].split(' '))
+          # Run the actual test
+          # Test command is guaranteed to be well-formed
+          # TODO(http://fxb/121613): Emulator instances are not cleaned up
+          # when tests fail. Added a clean up step before tests start to
+          # stop all running emulators.
+          with api.step.defer_results():
+            api.retry.step(
+                'run ffx test', [ffx] + suite['test_command'].split(' ')
+            )
 
-        # Outputs ffx log and emulator_log for debugging
-        dump_step = api.step('ffx log dump', [ffx, 'log', 'dump'])
-        # TODO(http://fxb/115447): Investigate why emulator_log isn't
-        # outputting full emulator logs
-        dump_step.presentation.logs[
-          'emulator_log'] = launch_step.raw_io.output_texts['emulator_log']
+        finally:
+          with api.step.nest('logs') as dump_step:
+            dump_step.presentation.logs['ffx_daemon_log'] = api.file.read_text(
+                'read ffx daemon log',
+                api.path.join(
+                    api.context.env.get('FFX_ISOLATE_DIR'), 'cache', 'logs',
+                    'ffx.daemon.log'
+                )
+            )
+            dump_step.presentation.logs['ffx_log'] = api.file.read_text(
+                'read ffx log',
+                api.path.join(
+                    api.context.env.get('FFX_ISOLATE_DIR'), 'cache', 'logs',
+                    'ffx.log'
+                )
+            )
+            dump_step.presentation.logs['emulator_log'] = api.file.read_text(
+                'read ffx daemon log',
+                api.path.join(
+                    api.context.env.get('FFX_ISOLATE_DIR'), 'data', 'emu',
+                    'instances', 'fuchsia-emulator', 'emulator.log'
+                )
+            )
+            dump_step.presentation.logs[
+                'emulator_serial_log'] = api.file.read_text(
+                    'read ffx daemon log',
+                    api.path.join(
+                        api.context.env.get('FFX_ISOLATE_DIR'), 'data', 'emu',
+                        'instances', 'fuchsia-emulator', 'emulator.log.serial'
+                    )
+                )
 
-        # Cleans up running processes to prevent clashing with future test runs
-        api.step('kill fserve', [fserve, '-kill'])
-        api.step('stop %s emulator' % arch, [ffx, '-v', 'emu', 'stop', '--all'])
+            # Cleans up running processes to prevent clashing with future test runs
+            api.step('kill fserve', [fserve, '-kill'])
+            api.step(
+                'stop %s emulator' % arch, [ffx, '-v', 'emu', 'stop', '--all']
+            )
 
 
 def BuildFuchsia(api):