summaryrefslogtreecommitdiff
path: root/qpid/doc/book/src/old/Java-Broker-StatusLogMessages.xml
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/doc/book/src/old/Java-Broker-StatusLogMessages.xml')
-rw-r--r--qpid/doc/book/src/old/Java-Broker-StatusLogMessages.xml294
1 files changed, 0 insertions, 294 deletions
diff --git a/qpid/doc/book/src/old/Java-Broker-StatusLogMessages.xml b/qpid/doc/book/src/old/Java-Broker-StatusLogMessages.xml
deleted file mode 100644
index 98f876e532..0000000000
--- a/qpid/doc/book/src/old/Java-Broker-StatusLogMessages.xml
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
-<book xmlns="http://docbook.org/ns/docbook"
- xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
- <info>
- <title>Operational Logging</title>
- <author>
- <orgname>Apache Software Foundation</orgname>
- </author>
- </info>
- <chapter>
- <title>Status Log Messages</title>
- <para>This file was derivied from LogMessages used within the Java Broker and originally defined on:
- <tag xlink:href="http://cwiki.apache.org/confluence/display/qpid/Status+Update+Design#StatusUpdateDesign-InitialStatusMessages">Apache Wiki</tag></para>
- <sect1>
- <title>Technical Notes:</title>
- <para>The status log messages file is a standard Java Properties file so white space is respected at the end of
- the lines. This file could be processed in a number of ways:</para>
- <para>
- <orderedlist>
- <listitem>
- <para>ResourceBundle</para>
- <para>This file is loaded as a ResourceBundle. The en_US addition to the
- file is the localisation. Additional localisations can be provided and
- will automatically be selected based on the &lt;locale> value in the
- config.xml. The default locale is en_US.</para>
- </listitem>
- <listitem>
- <para>MessageFormat</para>
- <para> Each entry is prepared with the Java Core MessageFormat methods.
- Therefore most functionality you can do via MessageFormat can be done
- here: </para>
- <para><tag xlink:href="http://java.sun.com/javase/6/docs/api/java/text/MessageFormat.html">Java API for MessageFormat</tag></para>
- <para>The caveat here is that only default String and number FormatTypes can
- be used. This is due to the processing described in 3 below. If support
- for date, time or choice is required then the GenerateLogMessages class
- should be updated to provide support.</para>
- </listitem>
- <listitem>
- <para>GenerateLogMessage/Velocity Macro</para>
- <para>This is the only processing that this file goes through</para>
- <orderedlist>
- <listitem>
- <para>Class Generation:</para>
- <para>The GenerateLogMessage processes this file and uses the
- velocity Macro to create classes with static methods to perform
- the logging and give us compile time validation. </para>
- </listitem>
- <listitem>
- <para>Property Processing</para>
- <para>During the class generation the message properties ({x}) are
- identified and used to create the method signature.</para>
- </listitem>
- <listitem>
- <para>Option Processing</para>
- <para>The Classes perform final formatting of the messages at
- runtime based on optional parameters that are defined within the
- message. Optional parameters are enclosed in square brackets
- e.g. [optional].</para>
- </listitem>
- </orderedlist>
- </listitem>
- </orderedlist>
- </para>
- <para><emphasis role="bold">Format Note:</emphasis></para>
- <para> As mentioned earlier white space in this file is very important. One thing in
- particular to note is the way MessageFormat performs its replacements. The
- replacement text will totally replace the {xxx} section so there will be no addition
- of white space or removal e.g. </para>
- <programlisting><![CDATA[MSG = Text----{0}----]]>
- </programlisting>
- <para> When given parameter 'Hello' result in text: </para>
- <programlisting><![CDATA[Text----Hello----]]>
- </programlisting>
- <para>For simple arguments this is expected however when using Style formats then it can
- be a little unexpected. In particular a common pattern is used for number
- replacements : {0,number,}. This is used in the Broker to display an Integer simply
- as the Integer with no formatting. e.g new Integer(1234567) becomes the String
- "1234567" which is can be contrasted with the pattern without a style format field :
- {0,number} which becomes string "1,234,567".</para>
- <para>What you may not expect is that {0,number, } would produce the String " 1234567"
- note that the space after the ',' here has resulted in a space in front of the
- number in the output.</para>
- <para>More details on the SubformatPattern can be found on the API link above. To
- provide fixed log messages as required by the Technical Specification:</para>
- <para><tag xlink:href="http://cwiki.apache.org/confluence/display/qpid/Operational+Logging+-+Status+Update+-+Technical+SpecificationOperationalLogging-StatusUpdate-TechnicalSpecification-Howtoprovidefixedlogmessages">Operational Logging Tech Specification</tag></para>
- <para>This file is processed by Velocity to create a number of classes that contain
- static methods that provide LogMessages in the code to provide compile time
- validation.</para>
- <para>For details of what processing is done see GenerateLogMessages. </para>
- <para>What a localiser or developer need know is the following: </para>
- <para>The Property structure is important as it defines how the class and methods will
- be built.</para>
- </sect1>
- <sect1>
- <title>Class Generation</title>
- <para> Each class of messages will be split in to their own &lt;Class>Messages.java.
- Each logmessage file contains only one class of messages the &lt;Class> name is
- derived from the name of the logmessages file e.g. &lt;Class&gt;_logmessages.properties.
- </para>
- </sect1>
- <sect1>
- <title>Property Format</title>
- <para>The property format MUST adhere to the follow format to make it easier to use the
- logging API as a developer but also so that operations staff can easily locate log
- messages in the output.</para>
- <para>The property file should contain entries in the following format:</para>
- <programlisting><![CDATA[<Log Identifier,developer focused>=<Log Identifier,Operate focus>:<Log Message>]]>
- </programlisting>
-
- <para>eg:</para>
- <programlisting><![CDATA[SHUTTING_DOWN = BRK-1003 : Shutting down : {0} port {1,number,}]]>
- </programlisting>
-
- <para>Note: the developer focused identifier will become a method name so only a valid
- method name should be used. Currently only '-' are converted to '_'.</para>
- <para>That said properties generate the logging code at build time so any error can be
- easily identified.</para>
- <para>The three character identifier show above in BRK-1003 should ideally be unique.
- This is the only requirement, limiting to 3 characters is not required.</para>
- <para>The current broker contains the following mappings:</para>
- <para>
- <table>
- <title>Status Messages Mapping</title>
- <tgroup cols="2">
- <colspec colname="c1" colnum="1" colwidth="118.29pt"/>
- <colspec colname="c2" colnum="2" colwidth="135.18pt"/>
- <thead>
- <row>
- <entry>Class</entry>
- <entry> Type</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>Broker</entry>
- <entry>BRK</entry>
- </row>
- <row>
- <entry>Management Console</entry>
- <entry>MNG</entry>
- </row>
- <row>
- <entry>VirtualHost</entry>
- <entry>VHT</entry>
- </row>
- <row>
- <entry>MessageStore</entry>
- <entry>MST</entry>
- </row>
- <row>
- <entry>ConfigStore</entry>
- <entry>CFG</entry>
- </row>
- <row>
- <entry>TransactionLog</entry>
- <entry>TXN</entry>
- </row>
- <row>
- <entry>Connection</entry>
- <entry>CON</entry>
- </row>
- <row>
- <entry>Channel</entry>
- <entry>CHN</entry>
- </row>
- <row>
- <entry>Queue</entry>
- <entry>QUE</entry>
- </row>
- <row>
- <entry>Exchange</entry>
- <entry>EXH</entry>
- </row>
- <row>
- <entry>Binding</entry>
- <entry>BND</entry>
- </row>
- <row>
- <entry>Subscription</entry>
- <entry>SUB</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </para>
- </sect1>
- <sect1>
- <title>Property Processing</title>
- <para>
- Each property is then processed by the GenerateLogMessages class to identify
- the number and type of parameters, {x} entries. Parameters are defaulted to
- String types but the use of FormatType number (e.g.{0,number}) will result
- in a Number type being used. These parameters are then used to build the
- method parameter list. e.g:
- </para>
-
- <para>Property:</para>
- <programlisting><![CDATA[SHUTTING_DOWN = BRK-1003 : Shutting down : {0} port {1,number,}]]></programlisting>
- <para>becomes Method:</para>
- <programlisting><![CDATA[public static LogMessage SHUTTING_DOWN(String param1, Number param2)]]>
- </programlisting>
-
- <para>
- This improves our compile time validation of log message content and
- ensures that change in the message format does not accidentally cause
- erroneous messages.</para>
- </sect1>
- <sect1>
- <title>Option Processing</title>
- <para>
- Options are identified in the log message as being surrounded by square
- brackets ([ ]). These optional values can themselves contain parameters
- however nesting of options is not permitted. Identification is performed on
- first matching so given the message:
- </para>
- <programlisting><![CDATA[Msg = Log Message [option1] [option2] ]]></programlisting>
- <para>
- Two options will be identified and enabled to select text 'option1' and
- 'option2'.
- </para>
- <para>
- The nesting of a options is not supported and will provide
- unexpected results. e.g. Using Message:
- </para>
- <programlisting><![CDATA[Msg = Log Message [option1 [sub-option2]] ]]></programlisting>
- <para>
- The options will be 'option1 [sub-option2' and 'sub-option2'. The first
- option includes the second option as the nesting is not detected.
- </para>
- <para>
- The detected options are presented in the method signature as boolean options
- numerically identified by their position in the message. e.g.
- Property:
- </para>
- <programlisting><![CDATA[ CON-1001 = Open : Client ID {0} [: Protocol Version : {1}] ]]></programlisting>
- <para>becomes Method:</para>
- <programlisting><![CDATA[ public static LogMessage CON_1001(String param1, String param2, boolean opt1) ]]></programlisting>
- <para>
- The value of 'opt1' will show/hide the option in the message. Note that
- 'param2' is still required however a null value can be used if the optional
- section is not desired.
- </para>
- <para>
- Again here the importance of white space needs to be highlighted.
- Looking at the QUE-1001 message as an example. The first thought on how this
- would look would be as follows:
- </para>
- <programlisting><![CDATA[ QUE-1001 = Create : Owner: {0} [AutoDelete] [Durable] [Transient] [Priority: {1,number,}] ]]></programlisting>
- <para>
- Each option is correctly defined so the text that is defined will appear when
- selected. e.g. 'AutoDelete'. However, what may not be immediately apparent is
- the white space. Using the above definition of QUE-1001 if we were to print
- the message with only the Priority option displayed it would appear as this:
- </para>
- <programlisting><![CDATA[ "Create : Owner: guest Priority: 1" ]]></programlisting>
- <para>
- Note the spaces here in between gues and Priority are present because only the text between the brackets
- has been removed.
- </para>
- <para>
- Each option needs to include white space to correctly format the message. So
- the correct definition of QUE-1001 is as follows:
- </para>
- <programlisting><![CDATA[ QUE-1001 = Create : Owner: {0}[ AutoDelete][ Durable][ Transient][ Priority: {1,number,}] ]]></programlisting>
- <para>
- Note that white space is included with each option and there is no extra
- white space between the options. As a result the output with just Priority
- enabled is as follows:
- </para>
- <programlisting><![CDATA[ "Create : Owner: guest Priority: 1" ]]></programlisting>
- </sect1>
- </chapter>
-</book>