diff --git a/metropolis/test/launch/cli/launch-multi2/main.go b/metropolis/test/launch/cli/launch-multi2/main.go
index 46770f2..141ad93 100644
--- a/metropolis/test/launch/cli/launch-multi2/main.go
+++ b/metropolis/test/launch/cli/launch-multi2/main.go
@@ -28,7 +28,8 @@
 func main() {
 	ctx := clicontext.WithInterrupt(context.Background())
 	cl, err := cluster.LaunchCluster(ctx, cluster.ClusterOptions{
-		NumNodes: 2,
+		NumNodes:        2,
+		NodeLogsToFiles: true,
 	})
 	if err != nil {
 		log.Fatalf("LaunchCluster: %v", err)
diff --git a/metropolis/test/launch/cluster/cluster.go b/metropolis/test/launch/cluster/cluster.go
index 5ea25b5..bfeb877 100644
--- a/metropolis/test/launch/cluster/cluster.go
+++ b/metropolis/test/launch/cluster/cluster.go
@@ -478,6 +478,13 @@
 type ClusterOptions struct {
 	// The number of nodes this cluster should be started with.
 	NumNodes int
+
+	// If true, node logs will be saved to individual files instead of being printed
+	// out to stderr. The path of these files will be still printed to stdout.
+	//
+	// The files will be located within the launch directory inside TEST_TMPDIR (or
+	// the default tempdir location, if not set).
+	NodeLogsToFiles bool
 }
 
 // Cluster is the running Metropolis cluster launched using the LaunchCluster
@@ -616,6 +623,14 @@
 	return cert, node, nil
 }
 
+func NewSerialFileLogger(p string) (io.ReadWriter, error) {
+	f, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE, 0600)
+	if err != nil {
+		return nil, err
+	}
+	return f, nil
+}
+
 // LaunchCluster launches a cluster of Metropolis node VMs together with a
 // Nanoswitch instance to network them all together.
 //
@@ -682,6 +697,15 @@
 		SerialPort: newPrefixedStdio(0),
 		PcapDump:   true,
 	}
+	if opts.NodeLogsToFiles {
+		path := path.Join(ld, "node-1.txt")
+		port, err := NewSerialFileLogger(path)
+		if err != nil {
+			return nil, fmt.Errorf("could not open log file for node 1: %w", err)
+		}
+		launch.Log("Node 1 logs at %s", path)
+		nodeOpts[0].SerialPort = port
+	}
 
 	// Start the first node.
 	ctxT, ctxC := context.WithCancel(ctx)
@@ -702,13 +726,24 @@
 	}
 
 	go func() {
+		var serialPort io.ReadWriter
+		if opts.NodeLogsToFiles {
+			path := path.Join(ld, "nanoswitch.txt")
+			serialPort, err = NewSerialFileLogger(path)
+			if err != nil {
+				launch.Log("Could not open log file for nanoswitch: %v", err)
+			}
+			launch.Log("Nanoswitch logs at %s", path)
+		} else {
+			serialPort = newPrefixedStdio(99)
+		}
 		if err := launch.RunMicroVM(ctxT, &launch.MicroVMOptions{
-			Name:                   "nanoswitch [99]",
+			Name:                   "nanoswitch",
 			KernelPath:             "metropolis/test/ktest/vmlinux",
 			InitramfsPath:          "metropolis/test/nanoswitch/initramfs.cpio.lz4",
 			ExtraNetworkInterfaces: switchPorts,
 			PortMap:                portMap,
-			SerialPort:             newPrefixedStdio(99),
+			SerialPort:             serialPort,
 			PcapDump:               path.Join(ld, "nanoswitch.pcap"),
 		}); err != nil {
 			if !errors.Is(err, ctxT.Err()) {
@@ -810,6 +845,15 @@
 			},
 			SerialPort: newPrefixedStdio(i),
 		}
+		if opts.NodeLogsToFiles {
+			path := path.Join(ld, fmt.Sprintf("node-%d.txt", i+1))
+			port, err := NewSerialFileLogger(path)
+			if err != nil {
+				return nil, fmt.Errorf("could not open log file for node %d: %w", i+1, err)
+			}
+			launch.Log("Node %d logs at %s", i+1, path)
+			nodeOpts[i].SerialPort = port
+		}
 	}
 
 	// Now run the rest of the nodes.
@@ -988,7 +1032,7 @@
 			errs = append(errs, err)
 		}
 	}
-	launch.Log("Cluster: removing nodes' state files.")
+	launch.Log("Cluster: removing nodes' state files (%s) and sockets (%s).", c.launchDir, c.socketDir)
 	os.RemoveAll(c.launchDir)
 	os.RemoveAll(c.socketDir)
 	os.RemoveAll(c.metroctlDir)
