...
This technical specification page will detail three four areas of work to complete the Status Update change:
- The new classes required
- How to provide fixed log messages
- The additions to existing classes
- The deletions from existing classes
...
Interface | Description |
---|---|
LogActor | Actor that is requesting the log to be performedwill perform the logging. |
MessageStatusLogger | Entity that wishes to provide log statements. |
LogSubject | Subject of the logging . |
LogMessage MessageStatusLoggerFactory | Factory to generate MSLoggersLogMessages. |
RootMessageStatusLogger RootMessageLogger | Root logger that performs logging. |
RawMessageLogger | Wrapper for object that actually performs the logging. |
...
Implementation of the Actors
Class | Description |
---|---|
ConnectionActor AMQPActor | Responsible for providing data about the Connection when logging. |
ManagementConnectionActor ManagementActor | Responsible for providing data about the Management Connection when logging. |
Implementation of the
...
LogSubject
Each of these LogSubjects will ensure they toString according to the format design.
Class | Description |
---|---|
ConnectionMessageStatusLogger ConnectionLogSubject | Logger responsible for the Connection format. |
ChannelMessageStatusLogger ChannelLogSubject | Logger responsible for the Channel format. |
QueueMessageStatusLogger QueueLogSubject | Logger responsible for the Queue format. |
ExchangeMessageStatusLogger ExchangeLogSubject | Logger responsible for the Exchange format. |
BindingMessageStatusLogger BindingLogSubject | Logger responsible for the Binding format. |
SubscriptionMessageStatusLogger SubscriptionLogSubject | Logger responsible for the subscription format. |
MessageStoreMessageStatusLogger MessageStoreLogSubject | Logger responsible for the MessageStore format. |
RootMessageStatusLoggerImpl RootMessageLoggerImpl | Base logger that performs the final message formatting before logging. |
MessageStatusLoggerFactoryImpl LogMessageFactoryImpl | Factory to create the above LoggersLogMessages. |
Logging
Class | Description |
---|---|
Log4jRawMessageLogger | Wrapper to use log4j as the output mechanism. |
TestRawMessageLogger | Wrapper that provides an inspectable log for testing. |
...
Class | Description |
---|---|
BrokerLogMessages | A static class that contains accessors to the various parametrised log messages. |
Psuedo-Code Example
Code Block | ||||
---|---|---|---|---|
| ||||
// logActor is retreived from the ThreadLocal
// a logMessage of type logMessage (with parms) is then requested for the specified subject.
logActor.logMessage(logSubject, LogMessage(parms))
...
instance of LogActor{
RootLogger logger = ...getRootLogger();L
public void logMessage(LogSubject subject, LogMessage message)
{
if (logger.isMessageEnabled(this, subject)
{
// FormatMessage in to :
// MESSAGE [ this.toString() ] [ subject.toString() ] <messageID> : <message value>
logger.logMessage(FormatMessage(this, subject, message));
}
}
}
|
How to provide fixed log messages
The design calls for providing a fixed method of accessing the messages. Such as the following
Code Block | ||||
---|---|---|---|---|
| ||||
String version="0.6";
int build=794277;
String message = BrokerLogMessages.BRK-1001(version, build);
|
The value of message above would be
No Format |
---|
BRK-1001 : Startup : Version: 0.6 Build: 794277
|
This can be done easily with the use of a MessageFormatter and a property file.
Code Block |
---|
BRK-1001 = Startup : Version {0} Build: {1}
|
Initially the BrokerLogMessages class could be hand coded but in a future iteration it could be generated based on the content of the property file.
Additions to existing classes
...
No Format |
---|
_logger.info("Binding queue:" + queue + " with routing key '" + routingKey + "' to exchange:" + this); _logger.debug("Loading configuration for virtualhost: " + config.getName()); |
Feedback
ID | From | Comment | Response |
---|---|---|---|
1 | Marnie | Ensure data logged in messaged due to be deleted is not lost. |
|
2 | Marnie | Following 1: Exception handling messages need further thought as replacing with 'Close' messages loses the cause |
|
3 | Marnie | Be mindful of performance in generating these log messages |
|
4 | Marnie | It is not clear that the LogActors, LogSubjects will be created and attached to their repective model objects |
|