diff --git a/quic/quartc/test/quartc_bidi_test.cc b/quic/quartc/test/quartc_bidi_test.cc
index c10e62e..3d0e30a 100644
--- a/quic/quartc/test/quartc_bidi_test.cc
+++ b/quic/quartc/test/quartc_bidi_test.cc
@@ -6,9 +6,11 @@
 #include "net/third_party/quiche/src/quic/core/quic_time.h"
 #include "net/third_party/quiche/src/quic/core/quic_types.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_str_cat.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/quartc/simulated_packet_transport.h"
 #include "net/third_party/quiche/src/quic/quartc/test/bidi_test_runner.h"
+#include "net/third_party/quiche/src/quic/quartc/test/quic_trace_interceptor.h"
 #include "net/third_party/quiche/src/quic/quartc/test/random_delay_link.h"
 #include "net/third_party/quiche/src/quic/quartc/test/random_packet_filter.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
@@ -25,6 +27,9 @@
     QUIC_LOG(INFO) << "Setting random seed to " << seed;
     random_.set_seed(seed);
     simulator_.set_random_generator(&random_);
+
+    client_trace_interceptor_ = QuicMakeUnique<QuicTraceInterceptor>("client");
+    server_trace_interceptor_ = QuicMakeUnique<QuicTraceInterceptor>("server");
   }
 
   void CreateTransports(QuicBandwidth bandwidth,
@@ -56,6 +61,9 @@
   std::unique_ptr<simulator::RandomPacketFilter> client_filter_;
   std::unique_ptr<simulator::RandomPacketFilter> server_filter_;
   std::unique_ptr<simulator::SymmetricRandomDelayLink> client_server_link_;
+
+  std::unique_ptr<QuicTraceInterceptor> client_trace_interceptor_;
+  std::unique_ptr<QuicTraceInterceptor> server_trace_interceptor_;
 };
 
 TEST_F(QuartcBidiTest, Basic300kbps200ms) {
@@ -64,6 +72,8 @@
                    10 * kDefaultMaxPacketSize, /*loss_percent=*/0);
   BidiTestRunner runner(&simulator_, client_transport_.get(),
                         server_transport_.get());
+  runner.set_client_interceptor(client_trace_interceptor_.get());
+  runner.set_server_interceptor(server_trace_interceptor_.get());
   EXPECT_TRUE(runner.RunTest(QuicTime::Delta::FromSeconds(30)));
 }
 
@@ -73,6 +83,8 @@
                    10 * kDefaultMaxPacketSize, /*loss_percent=*/2);
   BidiTestRunner runner(&simulator_, client_transport_.get(),
                         server_transport_.get());
+  runner.set_client_interceptor(client_trace_interceptor_.get());
+  runner.set_server_interceptor(server_trace_interceptor_.get());
   EXPECT_TRUE(runner.RunTest(QuicTime::Delta::FromSeconds(30)));
 }
 
@@ -84,6 +96,8 @@
       QuicTime::Delta::FromMilliseconds(25));
   BidiTestRunner runner(&simulator_, client_transport_.get(),
                         server_transport_.get());
+  runner.set_client_interceptor(client_trace_interceptor_.get());
+  runner.set_server_interceptor(server_trace_interceptor_.get());
   EXPECT_TRUE(runner.RunTest(QuicTime::Delta::FromSeconds(30)));
 }
 
diff --git a/quic/quartc/test/quic_trace_interceptor.cc b/quic/quartc/test/quic_trace_interceptor.cc
new file mode 100644
index 0000000..c2fa6ec
--- /dev/null
+++ b/quic/quartc/test/quic_trace_interceptor.cc
@@ -0,0 +1,47 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/third_party/quiche/src/quic/quartc/test/quic_trace_interceptor.h"
+
+#include <string>
+
+#include "net/third_party/quiche/src/quic/core/quic_error_codes.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_test_output.h"
+#include "net/third_party/quiche/src/quic/quartc/quartc_endpoint.h"
+#include "net/third_party/quiche/src/quic/quartc/quartc_session.h"
+
+namespace quic {
+namespace test {
+
+QuicTraceInterceptor::QuicTraceInterceptor(QuicStringPiece identifier)
+    : identifier_(identifier.data(), identifier.size()), delegate_(nullptr) {}
+
+QuicTraceInterceptor::~QuicTraceInterceptor() {
+  if (trace_visitor_) {
+    QuicRecordTestOutput(identifier_,
+                         trace_visitor_->trace()->SerializeAsString());
+  }
+}
+
+void QuicTraceInterceptor::OnSessionCreated(QuartcSession* session) {
+  trace_visitor_ = QuicMakeUnique<QuicTraceVisitor>(session->connection());
+  session->connection()->set_debug_visitor(trace_visitor_.get());
+
+  delegate_->OnSessionCreated(session);
+}
+
+void QuicTraceInterceptor::OnConnectError(QuicErrorCode error,
+                                          const std::string& details) {
+  delegate_->OnConnectError(error, details);
+}
+
+void QuicTraceInterceptor::SetDelegate(QuartcEndpoint::Delegate* delegate) {
+  DCHECK(delegate != nullptr);
+  delegate_ = delegate;
+}
+
+}  // namespace test
+}  // namespace quic
diff --git a/quic/quartc/test/quic_trace_interceptor.h b/quic/quartc/test/quic_trace_interceptor.h
new file mode 100644
index 0000000..bb731b1
--- /dev/null
+++ b/quic/quartc/test/quic_trace_interceptor.h
@@ -0,0 +1,43 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_QUARTC_TEST_QUIC_TRACE_INTERCEPTOR_H_
+#define QUICHE_QUIC_QUARTC_TEST_QUIC_TRACE_INTERCEPTOR_H_
+
+#include <string>
+
+#include "net/third_party/quiche/src/quic/core/quic_connection.h"
+#include "net/third_party/quiche/src/quic/core/quic_error_codes.h"
+#include "net/third_party/quiche/src/quic/core/quic_trace_visitor.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
+#include "net/third_party/quiche/src/quic/quartc/quartc_endpoint.h"
+#include "net/third_party/quiche/src/quic/quartc/quartc_session.h"
+#include "net/third_party/quiche/src/quic/quartc/test/bidi_test_runner.h"
+
+namespace quic {
+namespace test {
+
+class QuicTraceInterceptor : public QuartcEndpointInterceptor {
+ public:
+  // Creates a trace visitor that records its output using the given identifier.
+  // |identifier| is combined with the test name and timestamp to form a
+  // filename for the trace.
+  explicit QuicTraceInterceptor(QuicStringPiece identifier);
+  ~QuicTraceInterceptor() override;
+
+  // QuartcEndpointIntercept overrides.
+  void OnSessionCreated(QuartcSession* session) override;
+  void OnConnectError(QuicErrorCode error, const std::string& details) override;
+  void SetDelegate(QuartcEndpoint::Delegate* delegate) override;
+
+ private:
+  const std::string identifier_;
+  std::unique_ptr<QuicTraceVisitor> trace_visitor_;
+  QuartcEndpoint::Delegate* delegate_;
+};
+
+}  // namespace test
+}  // namespace quic
+
+#endif  // QUICHE_QUIC_QUARTC_TEST_QUIC_TRACE_INTERCEPTOR_H_
