View Javadoc

1   package org.bitrepository.protocol.messagebus.logger;
2   
3   /*
4    * #%L
5    * Bitrepository Core
6    * %%
7    * Copyright (C) 2010 - 2012 The State and University Library, The Royal Library and The State Archives, Denmark
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Lesser General Public License as 
11   * published by the Free Software Foundation, either version 2.1 of the 
12   * License, or (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Lesser Public License for more details.
18   * 
19   * You should have received a copy of the GNU General Lesser Public 
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/lgpl-2.1.html>.
22   * #L%
23   */
24  
25  import org.bitrepository.bitrepositorymessages.Message;
26  import org.bitrepository.bitrepositorymessages.MessageResponse;
27  import org.bitrepository.protocol.utils.MessageUtils;
28  import org.slf4j.Logger;
29  import org.slf4j.LoggerFactory;
30  
31  /**
32   * Implement the functionality for generic message logging. Open for extension for by custom loggers for specific
33   * messages.
34   */
35  public class DefaultMessagingLogger implements MessageLogger {
36      protected final Logger log = LoggerFactory.getLogger(getClass());
37  
38      @Override
39      public void logMessageSent(Message message) {
40          StringBuilder messageSB = new StringBuilder("Sent ");
41          if (shouldLogFullMessage(message)) {
42              logFullMessage(appendFullRepresentation(messageSB, message).toString());
43          } else {
44              appendMessageIDString(messageSB, message);
45              messageSB.append(" collectionID " + message.getCollectionID() + ", ");
46              if (message.isSetTo()) {
47                  messageSB.append(" to " + message.getTo() + ", ");
48              }
49              messageSB.append(" destination " + message.getDestination() + ": ");
50              appendShortRepresentation(messageSB, message);
51              logShortMessage(messageSB.toString());
52          }
53      }
54  
55      @Override
56      public void logMessageReceived(Message message) {
57          StringBuilder messageSB = new StringBuilder("Received ");
58          if (shouldLogFullMessage(message)) {
59              logFullMessage(appendFullRepresentation(messageSB, message).toString());
60          } else {
61              appendMessageIDString(messageSB, message);
62              messageSB.append(" from " + message.getFrom() + ": ");
63              appendShortRepresentation(messageSB, message);
64              logShortMessage(messageSB.toString());
65          }
66      }
67  
68      /**
69       *
70       Indicated whether the full message should be logged. Can be overridden in custom loggers.
71       */
72      protected boolean shouldLogFullMessage(Message message) {
73          return log.isTraceEnabled();
74      }
75  
76      /**
77       * Log the full message at trace level. May be overridden to log at a different level for concrete messages.
78       * @param message The message string to log.
79       * @return Whether the
80       */
81      protected void logFullMessage(String message) {
82          log.trace(message);
83      }
84      private StringBuilder appendFullRepresentation(StringBuilder messageSB, Message message) {
85          messageSB.append(message.toString());
86          return messageSB;
87      }
88  
89      /**
90       * Log the short version of the message at info level.
91       * May be overridden to log at a different level for concrete messages.
92       * @param message The message string to log.
93       */
94      protected void logShortMessage(String message) {
95          log.info(message);
96      }
97      private StringBuilder appendShortRepresentation(StringBuilder messageSB, Message message) {
98          if (message instanceof MessageResponse) {
99              appendResponseInfo(messageSB, (MessageResponse) message);
100         }
101         appendCustomInfo(messageSB, message);
102         return messageSB;
103     }
104 
105     private StringBuilder appendMessageIDString(StringBuilder messageSB, Message message) {
106         messageSB.append(message.getClass().getSimpleName());
107         messageSB.append("(" + MessageUtils.getShortConversationID(message.getCorrelationID()) + ")");
108         return messageSB;
109     }
110 
111     private StringBuilder appendResponseInfo(StringBuilder messageSB, MessageResponse response) {
112         messageSB.append(response.getResponseInfo().getResponseCode() + "(" +
113             response.getResponseInfo().getResponseText() + ")");
114         return messageSB;
115     }
116 
117     protected StringBuilder appendCustomInfo(StringBuilder messageSB, Message message) {
118         return messageSB;
119     }
120 }