diff --git a/http2/decoder/http2_structure_decoder.h b/http2/decoder/http2_structure_decoder.h
index 46c88b8..8ef5f78 100644
--- a/http2/decoder/http2_structure_decoder.h
+++ b/http2/decoder/http2_structure_decoder.h
@@ -15,12 +15,12 @@
 
 #include <cstdint>
 
-#include "base/logging.h"
 #include "net/third_party/quiche/src/http2/decoder/decode_buffer.h"
 #include "net/third_party/quiche/src/http2/decoder/decode_http2_structures.h"
 #include "net/third_party/quiche/src/http2/decoder/decode_status.h"
 #include "net/third_party/quiche/src/http2/http2_structures.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_export.h"
+#include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
 
 namespace http2 {
 namespace test {
@@ -44,8 +44,9 @@
   template <class S>
   bool Start(S* out, DecodeBuffer* db) {
     static_assert(S::EncodedSize() <= sizeof buffer_, "buffer_ is too small");
-    DVLOG(2) << __func__ << "@" << this << ": db->Remaining=" << db->Remaining()
-             << "; EncodedSize=" << S::EncodedSize();
+    HTTP2_DVLOG(2) << __func__ << "@" << this
+                   << ": db->Remaining=" << db->Remaining()
+                   << "; EncodedSize=" << S::EncodedSize();
     if (db->Remaining() >= S::EncodedSize()) {
       DoDecode(out, db);
       return true;
@@ -56,12 +57,12 @@
 
   template <class S>
   bool Resume(S* out, DecodeBuffer* db) {
-    DVLOG(2) << __func__ << "@" << this << ": offset_=" << offset_
-             << "; db->Remaining=" << db->Remaining();
+    HTTP2_DVLOG(2) << __func__ << "@" << this << ": offset_=" << offset_
+                   << "; db->Remaining=" << db->Remaining();
     if (ResumeFillingBuffer(db, S::EncodedSize())) {
       // We have the whole thing now.
-      DVLOG(2) << __func__ << "@" << this << "    offset_=" << offset_
-               << "    Ready to decode from buffer_.";
+      HTTP2_DVLOG(2) << __func__ << "@" << this << "    offset_=" << offset_
+                     << "    Ready to decode from buffer_.";
       DecodeBuffer buffer_db(buffer_, S::EncodedSize());
       DoDecode(out, &buffer_db);
       return true;
@@ -77,10 +78,10 @@
   template <class S>
   DecodeStatus Start(S* out, DecodeBuffer* db, uint32_t* remaining_payload) {
     static_assert(S::EncodedSize() <= sizeof buffer_, "buffer_ is too small");
-    DVLOG(2) << __func__ << "@" << this
-             << ": *remaining_payload=" << *remaining_payload
-             << "; db->Remaining=" << db->Remaining()
-             << "; EncodedSize=" << S::EncodedSize();
+    HTTP2_DVLOG(2) << __func__ << "@" << this
+                   << ": *remaining_payload=" << *remaining_payload
+                   << "; db->Remaining=" << db->Remaining()
+                   << "; EncodedSize=" << S::EncodedSize();
     if (db->MinLengthRemaining(*remaining_payload) >= S::EncodedSize()) {
       DoDecode(out, db);
       *remaining_payload -= S::EncodedSize();
@@ -91,14 +92,14 @@
 
   template <class S>
   bool Resume(S* out, DecodeBuffer* db, uint32_t* remaining_payload) {
-    DVLOG(3) << __func__ << "@" << this << ": offset_=" << offset_
-             << "; *remaining_payload=" << *remaining_payload
-             << "; db->Remaining=" << db->Remaining()
-             << "; EncodedSize=" << S::EncodedSize();
+    HTTP2_DVLOG(3) << __func__ << "@" << this << ": offset_=" << offset_
+                   << "; *remaining_payload=" << *remaining_payload
+                   << "; db->Remaining=" << db->Remaining()
+                   << "; EncodedSize=" << S::EncodedSize();
     if (ResumeFillingBuffer(db, remaining_payload, S::EncodedSize())) {
       // We have the whole thing now.
-      DVLOG(2) << __func__ << "@" << this << ": offset_=" << offset_
-               << "; Ready to decode from buffer_.";
+      HTTP2_DVLOG(2) << __func__ << "@" << this << ": offset_=" << offset_
+                     << "; Ready to decode from buffer_.";
       DecodeBuffer buffer_db(buffer_, S::EncodedSize());
       DoDecode(out, &buffer_db);
       return true;
