private String toStringSlow() {
        // Prepare all properties required for building a String, so that we don't have a chance of
        // building one String with a thread-local StringBuilder while building another String with
        // the same StringBuilder. See TemporaryThreadLocals for more information.
        final String sreqId = id().shortText();
        final String chanId = ch.id().asShortText();
        final InetAddress caddr = clientAddress();
        final String proto = sessionProtocol().uriText();
        final String authority = config().virtualHost().defaultHostname();
        final String path = path();
        final String method = method().name();

        // Build the string representation.
        try (TemporaryThreadLocals tempThreadLocals = TemporaryThreadLocals.acquire()) {
            final StringBuilder buf = tempThreadLocals.stringBuilder();
            buf.append("[sreqId=").append(sreqId)
               .append(", chanId=").append(chanId);

            if (!Objects.equals(caddr, remoteAddress.getAddress())) {
                buf.append(", caddr=");
                TextFormatter.appendInetAddress(buf, caddr);
            }
            if (!Objects.equals(remoteAddress, localAddress)) {
                buf.append(", raddr=");
                TextFormatter.appendSocketAddress(buf, remoteAddress);
            }
            buf.append(", laddr=");
            TextFormatter.appendSocketAddress(buf, localAddress);
            buf.append("][")
               .append(proto).append("://").append(authority).append(path).append('#').append(method)
               .append(']');

            return strVal = buf.toString();
        }
    }
Creates a new instance.

@param cfg the {@link ServiceConfig}
@param ch the {@link Channel} that handles the invocation
@param meterRegistry the {@link MeterRegistry} that collects various stats
@param sessionProtocol the {@link SessionProtocol} of the invocation
@param id the {@link RequestId} that represents the identifier of the current {@link Request}
          and {@link Response} pair.
@param routingContext the parameters which are used when finding a matched {@link Route}
@param routingResult the result of finding a matched {@link Route}
@param req the request associated with this context
@param sslSession the {@link SSLSession} for this invocation if it is over TLS
@param proxiedAddresses source and destination addresses delivered through proxy servers
@param clientAddress the address of a client who initiated the request
@param requestStartTimeNanos {@link System#nanoTime()} value when the request started.
@param requestStartTimeMicros the number of microseconds since the epoch,
                              e.g. {@code System.currentTimeMillis() * 1000}.
core/src/main/java/com/linecorp/armeria/internal/server/DefaultServiceRequestContext.java