Github user franz1981 commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/1592#discussion_r145358049
  
    --- Diff: 
artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTUtil.java
 ---
    @@ -149,16 +160,62 @@ public static void logMessage(MQTTSessionState state, 
MqttMessage message, boole
              if (message.fixedHeader() != null) {
                 log.append(message.fixedHeader().messageType().toString());
     
    -            if (message.variableHeader() instanceof 
MqttPublishVariableHeader) {
    -               log.append("(" + ((MqttPublishVariableHeader) 
message.variableHeader()).messageId() + ") " + 
message.fixedHeader().qosLevel());
    -            } else if (message.variableHeader() instanceof 
MqttMessageIdVariableHeader) {
    +            if (message.variableHeader() instanceof 
MqttMessageIdVariableHeader) {
                    log.append("(" + ((MqttMessageIdVariableHeader) 
message.variableHeader()).messageId() + ")");
                 }
     
    -            if (message.fixedHeader().messageType() == 
MqttMessageType.SUBSCRIBE) {
    -               for (MqttTopicSubscription sub : ((MqttSubscribeMessage) 
message).payload().topicSubscriptions()) {
    -                  log.append("\n\t" + sub.topicName() + " : " + 
sub.qualityOfService());
    -               }
    +            switch (message.fixedHeader().messageType()) {
    +               case PUBLISH:
    +                  MqttPublishVariableHeader publishHeader = 
(MqttPublishVariableHeader) message.variableHeader();
    +                  log.append("(" + publishHeader.packetId() + ")")
    +                     .append(" topic=" + publishHeader.topicName())
    +                     .append(", qos=" + message.fixedHeader().qosLevel())
    +                     .append(", retain=" + 
message.fixedHeader().isRetain())
    +                     .append(", dup=" + message.fixedHeader().isDup());
    +                  if (logUTF8PublishPayload != null) {
    +                     log.append(" payload=" + 
((MqttPublishMessage)message).payload().toString(StandardCharsets.UTF_8));
    +                  }
    +                  break;
    +               case CONNECT:
    +                  MqttConnectVariableHeader connectHeader = 
(MqttConnectVariableHeader) message.variableHeader();
    +                  MqttConnectPayload payload = 
((MqttConnectMessage)message).payload();
    +                  log.append(" name=").append(connectHeader.name())
    +                     .append(", version=").append(connectHeader.version())
    --- End diff --
    
    @jbertram In order to avoid the JVM to compile `logMessage` with a big 
method (killing futher optimisations of the caller) I suggest to move the log 
message building it in a separate method (eg `private static void 
traceMessage(...)`) and use a pattern of calls like this:
    ```
        public static void logMessage(MQTTSessionState state, MqttMessage 
message, boolean inbound) {        
           if (logger.isTraceEnabled()) {
              traceMessage(state, message, inbound);    
           }
        }
    ```
    This will let the JVM inline the `logMessage` call when is not needed.


---

Reply via email to