Consistent formatting of stream ID in HTTP/2 debug log messages
diff --git a/java/org/apache/coyote/http2/AbstractStream.java b/java/org/apache/coyote/http2/AbstractStream.java
index 3c8c904..088d5b0 100644
--- a/java/org/apache/coyote/http2/AbstractStream.java
+++ b/java/org/apache/coyote/http2/AbstractStream.java
@@ -33,6 +33,7 @@
     private static final StringManager sm = StringManager.getManager(AbstractStream.class);
 
     private final Integer identifier;
+    private final String idAsString;
 
     private volatile AbstractStream parentStream = null;
     private final Set<Stream> childStreams = Collections.newSetFromMap(new ConcurrentHashMap<>());
@@ -41,6 +42,7 @@
 
     AbstractStream(Integer identifier) {
         this.identifier = identifier;
+        this.idAsString = identifier.toString();
     }
 
 
@@ -49,6 +51,11 @@
     }
 
 
+    final String getIdAsString() {
+        return idAsString;
+    }
+
+
     final int getIdAsInt() {
         return identifier.intValue();
     }
@@ -118,7 +125,7 @@
 
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("abstractStream.windowSizeInc", getConnectionId(),
-                    getIdentifier(), Integer.toString(increment), Long.toString(windowSize)));
+                    getIdAsString(), Integer.toString(increment), Long.toString(windowSize)));
         }
 
         if (windowSize > ConnectionSettingsBase.MAX_WINDOW_SIZE) {
@@ -141,7 +148,7 @@
         windowSize -= decrement;
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("abstractStream.windowSizeDec", getConnectionId(),
-                    getIdentifier(), Integer.toString(decrement), Long.toString(windowSize)));
+                    getIdAsString(), Integer.toString(decrement), Long.toString(windowSize)));
         }
     }
 
diff --git a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
index ff58a7e..951c21c 100644
--- a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
@@ -198,7 +198,7 @@
     @Override
     void writeBody(Stream stream, ByteBuffer data, int len, boolean finished) throws IOException {
         if (log.isDebugEnabled()) {
-            log.debug(sm.getString("upgradeHandler.writeBody", connectionId, stream.getIdentifier(),
+            log.debug(sm.getString("upgradeHandler.writeBody", connectionId, stream.getIdAsString(),
                     Integer.toString(len)));
         }
         // Need to check this now since sending end of stream will change this.
@@ -258,7 +258,7 @@
         if (ack) {
             if (!localSettings.ack()) {
                 // Ack was unexpected
-                log.warn(sm.getString("upgradeHandler.unexpectedAck", connectionId, getIdentifier()));
+                log.warn(sm.getString("upgradeHandler.unexpectedAck", connectionId, getIdAsString()));
             }
         } else {
             socketWrapper.write(BlockingMode.SEMI_BLOCK, protocol.getWriteTimeout(),
diff --git a/java/org/apache/coyote/http2/Http2UpgradeHandler.java b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
index 0d72451..b1c44d9 100644
--- a/java/org/apache/coyote/http2/Http2UpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
@@ -665,10 +665,10 @@
         if (log.isDebugEnabled()) {
             if (pushedStreamId == 0) {
                 log.debug(sm.getString("upgradeHandler.writeHeaders", connectionId,
-                        stream.getIdentifier()));
+                        stream.getIdAsString()));
             } else {
                 log.debug(sm.getString("upgradeHandler.writePushHeaders", connectionId,
-                        stream.getIdentifier(), Integer.valueOf(pushedStreamId),
+                        stream.getIdAsString(), Integer.valueOf(pushedStreamId),
                         Boolean.valueOf(endOfStream)));
             }
         }
@@ -743,7 +743,7 @@
 
     void writeBody(Stream stream, ByteBuffer data, int len, boolean finished) throws IOException {
         if (log.isDebugEnabled()) {
-            log.debug(sm.getString("upgradeHandler.writeBody", connectionId, stream.getIdentifier(),
+            log.debug(sm.getString("upgradeHandler.writeBody", connectionId, stream.getIdAsString(),
                     Integer.toString(len)));
         }
 
@@ -911,7 +911,7 @@
                                 if (stream.isActive()) {
                                     if (log.isDebugEnabled()) {
                                         log.debug(sm.getString("upgradeHandler.noAllocation",
-                                                connectionId, stream.getIdentifier()));
+                                                connectionId, stream.getIdAsString()));
                                     }
                                     // No allocation
                                     // Close the connection. Do this first since
@@ -932,7 +932,7 @@
                         } catch (InterruptedException e) {
                             throw new IOException(sm.getString(
                                     "upgradeHandler.windowSizeReservationInterrupted", connectionId,
-                                    stream.getIdentifier(), Integer.toString(reservation)), e);
+                                    stream.getIdAsString(), Integer.toString(reservation)), e);
                         }
                     } else {
                         stream.waitForConnectionAllocationNonBlocking();
@@ -964,7 +964,7 @@
             for (AbstractStream stream : streamsToNotify) {
                 if (log.isDebugEnabled()) {
                     log.debug(sm.getString("upgradeHandler.releaseBacklog",
-                            connectionId, stream.getIdentifier()));
+                            connectionId, stream.getIdAsString()));
                 }
                 // There is never any O/P on stream zero but it is included in
                 // the backlog as it simplifies the code. Skip it if it appears
@@ -1021,7 +1021,7 @@
     private int allocate(AbstractStream stream, int allocation) {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("upgradeHandler.allocate.debug", getConnectionId(),
-                    stream.getIdentifier(), Integer.toString(allocation)));
+                    stream.getIdAsString(), Integer.toString(allocation)));
         }
         // Allocate to the specified stream
         BacklogTracker tracker = backLogStreams.get(stream);
@@ -1034,7 +1034,7 @@
 
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("upgradeHandler.allocate.left",
-                    getConnectionId(), stream.getIdentifier(), Integer.toString(leftToAllocate)));
+                    getConnectionId(), stream.getIdAsString(), Integer.toString(leftToAllocate)));
         }
 
         // Recipients are children of the current stream that are in the
@@ -1053,7 +1053,7 @@
             for (AbstractStream recipient : recipients) {
                 if (log.isDebugEnabled()) {
                     log.debug(sm.getString("upgradeHandler.allocate.recipient",
-                            getConnectionId(), stream.getIdentifier(), recipient.getIdentifier(),
+                            getConnectionId(), stream.getIdAsString(), recipient.getIdAsString(),
                             Integer.toString(recipient.getWeight())));
                 }
                 totalWeight += recipient.getWeight();
@@ -1092,7 +1092,7 @@
         Stream result = streams.get(key);
         if (result == null && unknownIsError) {
             // Stream has been closed and removed from the map
-            throw new ConnectionException(sm.getString("upgradeHandler.stream.closed", key),
+            throw new ConnectionException(sm.getString("upgradeHandler.stream.closed", key.toString()),
                     Http2Error.PROTOCOL_ERROR);
         }
         return result;
@@ -1602,7 +1602,7 @@
                 } catch (Http2Exception h2e) {
                     stream.close(new StreamException(sm.getString(
                             "upgradeHandler.windowSizeTooBig", connectionId,
-                            stream.getIdentifier()),
+                            stream.getIdAsString()),
                             h2e.getError(), stream.getIdAsInt()));
                }
             }
@@ -1618,7 +1618,7 @@
             if (!localSettings.ack()) {
                 // Ack was unexpected
                 log.warn(sm.getString(
-                        "upgradeHandler.unexpectedAck", connectionId, getIdentifier()));
+                        "upgradeHandler.unexpectedAck", connectionId, getIdAsString()));
             }
         } else {
             synchronized (socketWrapper) {
diff --git a/java/org/apache/coyote/http2/Stream.java b/java/org/apache/coyote/http2/Stream.java
index 5089456..7625624 100644
--- a/java/org/apache/coyote/http2/Stream.java
+++ b/java/org/apache/coyote/http2/Stream.java
@@ -178,8 +178,8 @@
     final void rePrioritise(AbstractStream parent, boolean exclusive, int weight) {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("stream.reprioritisation.debug",
-                    getConnectionId(), getIdentifier(), Boolean.toString(exclusive),
-                    parent.getIdentifier(), Integer.toString(weight)));
+                    getConnectionId(), getIdAsString(), Boolean.toString(exclusive),
+                    parent.getIdAsString(), Integer.toString(weight)));
         }
 
         // Check if new parent is a descendant of this stream
@@ -213,8 +213,8 @@
     final void rePrioritise(AbstractStream parent, int weight) {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("stream.reprioritisation.debug",
-                    getConnectionId(), getIdentifier(), Boolean.FALSE,
-                    parent.getIdentifier(), Integer.toString(weight)));
+                    getConnectionId(), getIdAsString(), Boolean.FALSE,
+                    parent.getIdAsString(), Integer.toString(weight)));
         }
 
         parent.addChild(this);
@@ -224,7 +224,7 @@
 
     final void receiveReset(long errorCode) {
         if (log.isDebugEnabled()) {
-            log.debug(sm.getString("stream.reset.receive", getConnectionId(), getIdentifier(),
+            log.debug(sm.getString("stream.reset.receive", getConnectionId(), getIdAsString(),
                     Long.toString(errorCode)));
         }
         // Set the new state first since read and write both check this
@@ -267,7 +267,7 @@
         while (windowSize < 1) {
             if (!canWrite()) {
                 throw new CloseNowException(sm.getString("stream.notWritable",
-                        getConnectionId(), getIdentifier()));
+                        getConnectionId(), getIdAsString()));
             }
             if (block) {
                 try {
@@ -330,25 +330,25 @@
     @Override
     public final void emitHeader(String name, String value) throws HpackException {
         if (log.isDebugEnabled()) {
-            log.debug(sm.getString("stream.header.debug", getConnectionId(), getIdentifier(),
+            log.debug(sm.getString("stream.header.debug", getConnectionId(), getIdAsString(),
                     name, value));
         }
 
         // Header names must be lower case
         if (!name.toLowerCase(Locale.US).equals(name)) {
             throw new HpackException(sm.getString("stream.header.case",
-                    getConnectionId(), getIdentifier(), name));
+                    getConnectionId(), getIdAsString(), name));
         }
 
         if ("connection".equals(name)) {
             throw new HpackException(sm.getString("stream.header.connection",
-                    getConnectionId(), getIdentifier()));
+                    getConnectionId(), getIdAsString()));
         }
 
         if ("te".equals(name)) {
             if (!"trailers".equals(value)) {
                 throw new HpackException(sm.getString("stream.header.te",
-                        getConnectionId(), getIdentifier(), value));
+                        getConnectionId(), getIdAsString(), value));
             }
         }
 
@@ -360,14 +360,14 @@
 
         if (name.length() == 0) {
             throw new HpackException(sm.getString("stream.header.empty",
-                    getConnectionId(), getIdentifier()));
+                    getConnectionId(), getIdAsString()));
         }
 
         boolean pseudoHeader = name.charAt(0) == ':';
 
         if (pseudoHeader && headerState != HEADER_STATE_PSEUDO) {
             headerException = new StreamException(sm.getString(
-                    "stream.header.unexpectedPseudoHeader", getConnectionId(), getIdentifier(),
+                    "stream.header.unexpectedPseudoHeader", getConnectionId(), getIdAsString(),
                     name), Http2Error.PROTOCOL_ERROR, getIdAsInt());
             // No need for further processing. The stream will be reset.
             return;
@@ -383,7 +383,7 @@
                 coyoteRequest.method().setString(value);
             } else {
                 throw new HpackException(sm.getString("stream.header.duplicate",
-                        getConnectionId(), getIdentifier(), ":method" ));
+                        getConnectionId(), getIdAsString(), ":method" ));
             }
             break;
         }
@@ -392,18 +392,18 @@
                 coyoteRequest.scheme().setString(value);
             } else {
                 throw new HpackException(sm.getString("stream.header.duplicate",
-                        getConnectionId(), getIdentifier(), ":scheme" ));
+                        getConnectionId(), getIdAsString(), ":scheme" ));
             }
             break;
         }
         case ":path": {
             if (!coyoteRequest.requestURI().isNull()) {
                 throw new HpackException(sm.getString("stream.header.duplicate",
-                        getConnectionId(), getIdentifier(), ":path" ));
+                        getConnectionId(), getIdAsString(), ":path" ));
             }
             if (value.length() == 0) {
                 throw new HpackException(sm.getString("stream.header.noPath",
-                        getConnectionId(), getIdentifier()));
+                        getConnectionId(), getIdAsString()));
             }
             int queryStart = value.indexOf('?');
             String uri;
@@ -430,7 +430,7 @@
                 } catch (IllegalArgumentException iae) {
                     // Host value invalid
                     throw new HpackException(sm.getString("stream.header.invalid",
-                            getConnectionId(), getIdentifier(), ":authority", value));
+                            getConnectionId(), getIdAsString(), ":authority", value));
                 }
                 if (i > -1) {
                     coyoteRequest.serverName().setString(value.substring(0, i));
@@ -440,7 +440,7 @@
                 }
             } else {
                 throw new HpackException(sm.getString("stream.header.duplicate",
-                        getConnectionId(), getIdentifier(), ":authority" ));
+                        getConnectionId(), getIdAsString(), ":authority" ));
             }
             break;
         }
@@ -465,7 +465,7 @@
             }
             if (pseudoHeader) {
                 headerException = new StreamException(sm.getString(
-                        "stream.header.unknownPseudoHeader", getConnectionId(), getIdentifier(),
+                        "stream.header.unknownPseudoHeader", getConnectionId(), getIdAsString(),
                         name), Http2Error.PROTOCOL_ERROR, getIdAsInt());
             }
 
@@ -502,7 +502,7 @@
         if (coyoteRequest.method().isNull() || coyoteRequest.scheme().isNull() ||
                 coyoteRequest.requestURI().isNull()) {
             throw new ConnectionException(sm.getString("stream.header.required",
-                    getConnectionId(), getIdentifier()), Http2Error.PROTOCOL_ERROR);
+                    getConnectionId(), getIdAsString()), Http2Error.PROTOCOL_ERROR);
         }
         // Cookie headers need to be concatenated into a single header
         // See RFC 7540 8.1.2.5
@@ -607,7 +607,7 @@
                         handler.getProtocol().getMaxTrailerSize());
             } else {
                 throw new ConnectionException(sm.getString("stream.trailerHeader.noEndOfStream",
-                        getConnectionId(), getIdentifier()), Http2Error.PROTOCOL_ERROR);
+                        getConnectionId(), getIdAsString()), Http2Error.PROTOCOL_ERROR);
             }
         }
         // Parser will catch attempt to send a headers frame after the stream
@@ -626,7 +626,7 @@
         long contentLengthHeader = coyoteRequest.getContentLengthLong();
         if (contentLengthHeader > -1 && contentLengthReceived > contentLengthHeader) {
             throw new ConnectionException(sm.getString("stream.header.contentLength",
-                    getConnectionId(), getIdentifier(), Long.valueOf(contentLengthHeader),
+                    getConnectionId(), getIdAsString(), Long.valueOf(contentLengthHeader),
                     Long.valueOf(contentLengthReceived)), Http2Error.PROTOCOL_ERROR);
         }
     }
@@ -635,7 +635,7 @@
     final void receivedEndOfStream() throws ConnectionException {
         if (isContentLengthInconsistent()) {
             throw new ConnectionException(sm.getString("stream.header.contentLength",
-                    getConnectionId(), getIdentifier(),
+                    getConnectionId(), getIdAsString(),
                     Long.valueOf(coyoteRequest.getContentLengthLong()),
                     Long.valueOf(contentLengthReceived)), Http2Error.PROTOCOL_ERROR);
         }
@@ -721,7 +721,7 @@
             try {
                 StreamException se = (StreamException) http2Exception;
                 if (log.isDebugEnabled()) {
-                    log.debug(sm.getString("stream.reset.send", getConnectionId(), getIdentifier(),
+                    log.debug(sm.getString("stream.reset.send", getConnectionId(), getIdAsString(),
                             se.getError()));
                 }
                 state.sendReset();
@@ -749,7 +749,7 @@
      */
     final void recycle() {
         if (log.isDebugEnabled()) {
-            log.debug(sm.getString("stream.recycle", getConnectionId(), getIdentifier()));
+            log.debug(sm.getString("stream.recycle", getConnectionId(), getIdAsString()));
         }
         /*
          * Temporarily disabled due to multiple regressions (NPEs)
@@ -877,7 +877,7 @@
         public final synchronized int doWrite(ByteBuffer chunk) throws IOException {
             if (closed) {
                 throw new IllegalStateException(
-                        sm.getString("stream.closed", getConnectionId(), getIdentifier()));
+                        sm.getString("stream.closed", getConnectionId(), getIdAsString()));
             }
             // chunk is always fully written
             int result = chunk.remaining();
@@ -944,7 +944,7 @@
                 throws IOException {
             if (log.isDebugEnabled()) {
                 log.debug(sm.getString("stream.outputBuffer.flush.debug", getConnectionId(),
-                        getIdentifier(), Integer.toString(buffer.position()),
+                        getIdAsString(), Integer.toString(buffer.position()),
                         Boolean.toString(writeInProgress), Boolean.toString(closed)));
             }
             if (buffer.position() == 0) {
diff --git a/java/org/apache/coyote/http2/StreamProcessor.java b/java/org/apache/coyote/http2/StreamProcessor.java
index 7eab7ee..94904c0 100644
--- a/java/org/apache/coyote/http2/StreamProcessor.java
+++ b/java/org/apache/coyote/http2/StreamProcessor.java
@@ -79,14 +79,14 @@
                         if (!getErrorState().isConnectionIoAllowed()) {
                             ConnectionException ce = new ConnectionException(sm.getString(
                                     "streamProcessor.error.connection", stream.getConnectionId(),
-                                    stream.getIdentifier()), Http2Error.INTERNAL_ERROR);
+                                    stream.getIdAsString()), Http2Error.INTERNAL_ERROR);
                             stream.close(ce);
                         } else if (!getErrorState().isIoAllowed()) {
                             StreamException se = stream.getResetException();
                             if (se == null) {
                                 se = new StreamException(sm.getString(
                                         "streamProcessor.error.stream", stream.getConnectionId(),
-                                        stream.getIdentifier()), Http2Error.INTERNAL_ERROR,
+                                        stream.getIdAsString()), Http2Error.INTERNAL_ERROR,
                                         stream.getIdAsInt());
                             }
                             stream.close(se);
@@ -99,7 +99,7 @@
                     }
                 } catch (Exception e) {
                     String msg = sm.getString("streamProcessor.error.connection",
-                            stream.getConnectionId(), stream.getIdentifier());
+                            stream.getConnectionId(), stream.getIdAsString());
                     if (log.isDebugEnabled()) {
                         log.debug(msg, e);
                     }
@@ -364,7 +364,7 @@
 
     @Override
     protected Object getStreamID() {
-        return stream.getIdentifier().toString();
+        return stream.getIdAsString().toString();
     }
 
 
@@ -428,7 +428,7 @@
     protected final boolean flushBufferedWrite() throws IOException {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("streamProcessor.flushBufferedWrite.entry",
-                    stream.getConnectionId(), stream.getIdentifier()));
+                    stream.getConnectionId(), stream.getIdAsString()));
         }
         if (stream.flush(false)) {
             // The buffer wasn't fully flushed so re-register the
@@ -472,7 +472,7 @@
             // triggered.
             StreamException se = new StreamException(
                     sm.getString("streamProcessor.cancel", stream.getConnectionId(),
-                            stream.getIdentifier()), Http2Error.CANCEL, stream.getIdAsInt());
+                            stream.getIdAsString()), Http2Error.CANCEL, stream.getIdAsInt());
             handler.sendStreamReset(se);
         }
     }
diff --git a/java/org/apache/coyote/http2/StreamStateMachine.java b/java/org/apache/coyote/http2/StreamStateMachine.java
index 948e7cd..851e1a8 100644
--- a/java/org/apache/coyote/http2/StreamStateMachine.java
+++ b/java/org/apache/coyote/http2/StreamStateMachine.java
@@ -92,7 +92,7 @@
     public synchronized void sendReset() {
         if (state == State.IDLE) {
             throw new IllegalStateException(sm.getString("streamStateMachine.debug.change",
-                    stream.getConnectionId(), stream.getIdentifier(), state));
+                    stream.getConnectionId(), stream.getIdAsString(), state));
         }
         if (state.canReset()) {
             stateChange(state, State.CLOSED_RST_TX);
@@ -110,7 +110,7 @@
             state = newState;
             if (log.isDebugEnabled()) {
                 log.debug(sm.getString("streamStateMachine.debug.change", stream.getConnectionId(),
-                        stream.getIdentifier(), oldState, newState));
+                        stream.getIdAsString(), oldState, newState));
             }
         }
     }
@@ -122,11 +122,11 @@
         if (!isFrameTypePermitted(frameType)) {
             if (state.connectionErrorForInvalidFrame) {
                 throw new ConnectionException(sm.getString("streamStateMachine.invalidFrame",
-                        stream.getConnectionId(), stream.getIdentifier(), state, frameType),
+                        stream.getConnectionId(), stream.getIdAsString(), state, frameType),
                         state.errorCodeForInvalidFrame);
             } else {
                 throw new StreamException(sm.getString("streamStateMachine.invalidFrame",
-                        stream.getConnectionId(), stream.getIdentifier(), state, frameType),
+                        stream.getConnectionId(), stream.getIdAsString(), state, frameType),
                         state.errorCodeForInvalidFrame, stream.getIdAsInt());
             }
         }
diff --git a/java/org/apache/coyote/http2/WindowAllocationManager.java b/java/org/apache/coyote/http2/WindowAllocationManager.java
index 973ce59..96016cc 100644
--- a/java/org/apache/coyote/http2/WindowAllocationManager.java
+++ b/java/org/apache/coyote/http2/WindowAllocationManager.java
@@ -68,7 +68,7 @@
     void waitForStream(long timeout) throws InterruptedException {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("windowAllocationManager.waitFor.stream",
-                    stream.getConnectionId(), stream.getIdentifier(), Long.toString(timeout)));
+                    stream.getConnectionId(), stream.getIdAsString(), Long.toString(timeout)));
         }
 
         waitFor(STREAM, timeout);
@@ -78,7 +78,7 @@
     void waitForConnection(long timeout) throws InterruptedException {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("windowAllocationManager.waitFor.connection",
-                    stream.getConnectionId(), stream.getIdentifier(), Long.toString(timeout)));
+                    stream.getConnectionId(), stream.getIdAsString(), Long.toString(timeout)));
         }
 
         waitFor(CONNECTION, timeout);
@@ -88,7 +88,7 @@
     void waitForStreamNonBlocking() {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("windowAllocationManager.waitForNonBlocking.stream",
-                    stream.getConnectionId(), stream.getIdentifier()));
+                    stream.getConnectionId(), stream.getIdAsString()));
         }
 
         waitForNonBlocking(STREAM);
@@ -98,7 +98,7 @@
     void waitForConnectionNonBlocking() {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("windowAllocationManager.waitForNonBlocking.connection",
-                    stream.getConnectionId(), stream.getIdentifier()));
+                    stream.getConnectionId(), stream.getIdAsString()));
         }
 
         waitForNonBlocking(CONNECTION);
@@ -141,7 +141,7 @@
         synchronized (stream) {
             if (waitingFor != NONE) {
                 throw new IllegalStateException(sm.getString("windowAllocationManager.waitFor.ise",
-                        stream.getConnectionId(), stream.getIdentifier()));
+                        stream.getConnectionId(), stream.getIdAsString()));
             }
 
             waitingFor = waitTarget;
@@ -164,7 +164,7 @@
                 // Non-blocking post-processing may attempt to flush
             } else {
                 throw new IllegalStateException(sm.getString("windowAllocationManager.waitFor.ise",
-                        stream.getConnectionId(), stream.getIdentifier()));
+                        stream.getConnectionId(), stream.getIdAsString()));
             }
 
         }
@@ -174,7 +174,7 @@
     private void notify(int notifyTarget) {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("windowAllocationManager.notify", stream.getConnectionId(),
-                    stream.getIdentifier(), Integer.toString(waitingFor), Integer.toString(notifyTarget)));
+                    stream.getIdAsString(), Integer.toString(waitingFor), Integer.toString(notifyTarget)));
         }
 
         synchronized (stream) {
@@ -191,14 +191,14 @@
                         // Blocking, so use notify to release StreamOutputBuffer
                         if (log.isDebugEnabled()) {
                             log.debug(sm.getString("windowAllocationManager.notified",
-                                    stream.getConnectionId(), stream.getIdentifier()));
+                                    stream.getConnectionId(), stream.getIdAsString()));
                         }
                         stream.notify();
                     } else {
                         // Non-blocking so dispatch
                         if (log.isDebugEnabled()) {
                             log.debug(sm.getString("windowAllocationManager.dispatched",
-                                    stream.getConnectionId(), stream.getIdentifier()));
+                                    stream.getConnectionId(), stream.getIdAsString()));
                         }
                         response.action(ActionCode.DISPATCH_WRITE, null);
                         // Need to explicitly execute dispatches on the StreamProcessor
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index b8124a8..6dd713f 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -96,6 +96,10 @@
         response if the Connector was configured with
         <code>maxSwallowSize=-1</code>. (markt)
       </fix>
+      <fix>
+        When logging HTTP/2 debug messages, use consistent formatting for stream
+        idnetifiers. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">