<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<FONT color="green">003</FONT>     * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<FONT color="green">004</FONT>     * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<FONT color="green">005</FONT>     * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<FONT color="green">006</FONT>     * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<FONT color="green">007</FONT>     * the License. You may obtain a copy of the License at<a name="line.7"></a>
<FONT color="green">008</FONT>     *<a name="line.8"></a>
<FONT color="green">009</FONT>     *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<FONT color="green">012</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<FONT color="green">013</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<FONT color="green">014</FONT>     * See the license for the specific language governing permissions and<a name="line.14"></a>
<FONT color="green">015</FONT>     * limitations under the license.<a name="line.15"></a>
<FONT color="green">016</FONT>     */<a name="line.16"></a>
<FONT color="green">017</FONT>    package org.apache.logging.log4j.core.layout;<a name="line.17"></a>
<FONT color="green">018</FONT>    <a name="line.18"></a>
<FONT color="green">019</FONT>    import org.apache.logging.log4j.LoggingException;<a name="line.19"></a>
<FONT color="green">020</FONT>    import org.apache.logging.log4j.core.LogEvent;<a name="line.20"></a>
<FONT color="green">021</FONT>    import org.apache.logging.log4j.core.config.Configuration;<a name="line.21"></a>
<FONT color="green">022</FONT>    import org.apache.logging.log4j.core.config.plugins.Plugin;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.logging.log4j.core.config.plugins.PluginAttr;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.logging.log4j.core.config.plugins.PluginFactory;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.logging.log4j.core.net.Facility;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.logging.log4j.core.net.Priority;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.logging.log4j.message.Message;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.logging.log4j.message.StructuredDataId;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.logging.log4j.message.StructuredDataMessage;<a name="line.30"></a>
<FONT color="green">031</FONT>    <a name="line.31"></a>
<FONT color="green">032</FONT>    import java.net.InetAddress;<a name="line.32"></a>
<FONT color="green">033</FONT>    import java.net.UnknownHostException;<a name="line.33"></a>
<FONT color="green">034</FONT>    import java.nio.charset.Charset;<a name="line.34"></a>
<FONT color="green">035</FONT>    import java.util.ArrayList;<a name="line.35"></a>
<FONT color="green">036</FONT>    import java.util.Calendar;<a name="line.36"></a>
<FONT color="green">037</FONT>    import java.util.GregorianCalendar;<a name="line.37"></a>
<FONT color="green">038</FONT>    import java.util.List;<a name="line.38"></a>
<FONT color="green">039</FONT>    import java.util.Map;<a name="line.39"></a>
<FONT color="green">040</FONT>    import java.util.SortedMap;<a name="line.40"></a>
<FONT color="green">041</FONT>    import java.util.TreeMap;<a name="line.41"></a>
<FONT color="green">042</FONT>    <a name="line.42"></a>
<FONT color="green">043</FONT>    <a name="line.43"></a>
<FONT color="green">044</FONT>    /**<a name="line.44"></a>
<FONT color="green">045</FONT>     * Formats a log event in accordance with RFC 5424.<a name="line.45"></a>
<FONT color="green">046</FONT>     */<a name="line.46"></a>
<FONT color="green">047</FONT>    @Plugin(name = "RFC5424Layout", type = "Core", elementType = "layout", printObject = true)<a name="line.47"></a>
<FONT color="green">048</FONT>    public final class RFC5424Layout extends AbstractStringLayout {<a name="line.48"></a>
<FONT color="green">049</FONT>    <a name="line.49"></a>
<FONT color="green">050</FONT>        /**<a name="line.50"></a>
<FONT color="green">051</FONT>         * Not a very good default - it is the Apache Software Foundation's enterprise number.<a name="line.51"></a>
<FONT color="green">052</FONT>         */<a name="line.52"></a>
<FONT color="green">053</FONT>        public static final int DEFAULT_ENTERPRISE_NUMBER = 18060;<a name="line.53"></a>
<FONT color="green">054</FONT>        /**<a name="line.54"></a>
<FONT color="green">055</FONT>         * The default event id.<a name="line.55"></a>
<FONT color="green">056</FONT>         */<a name="line.56"></a>
<FONT color="green">057</FONT>        public static final String DEFAULT_ID = "Audit";<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>        private static final String DEFAULT_MDCID = "mdc";<a name="line.59"></a>
<FONT color="green">060</FONT>        private static final int TWO_DIGITS = 10;<a name="line.60"></a>
<FONT color="green">061</FONT>        private static final int THREE_DIGITS = 100;<a name="line.61"></a>
<FONT color="green">062</FONT>        private static final int MILLIS_PER_MINUTE = 60000;<a name="line.62"></a>
<FONT color="green">063</FONT>        private static final int MINUTES_PER_HOUR = 60;<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>        private final Facility facility;<a name="line.65"></a>
<FONT color="green">066</FONT>        private final String defaultId;<a name="line.66"></a>
<FONT color="green">067</FONT>        private final Integer enterpriseNumber;<a name="line.67"></a>
<FONT color="green">068</FONT>        private final boolean includeMDC;<a name="line.68"></a>
<FONT color="green">069</FONT>        private final String mdcId;<a name="line.69"></a>
<FONT color="green">070</FONT>        private final String localHostName;<a name="line.70"></a>
<FONT color="green">071</FONT>        private final String appName;<a name="line.71"></a>
<FONT color="green">072</FONT>        private final String messageId;<a name="line.72"></a>
<FONT color="green">073</FONT>        private final String configName;<a name="line.73"></a>
<FONT color="green">074</FONT>        private final List&lt;String&gt; mdcExcludes;<a name="line.74"></a>
<FONT color="green">075</FONT>        private final List&lt;String&gt; mdcIncludes;<a name="line.75"></a>
<FONT color="green">076</FONT>        private final List&lt;String&gt; mdcRequired;<a name="line.76"></a>
<FONT color="green">077</FONT>        private final ListChecker checker;<a name="line.77"></a>
<FONT color="green">078</FONT>        private final ListChecker noopChecker = new NoopChecker();<a name="line.78"></a>
<FONT color="green">079</FONT>        private final boolean includeNewLine;<a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        private long lastTimestamp = -1;<a name="line.81"></a>
<FONT color="green">082</FONT>        private String timestamppStr = null;<a name="line.82"></a>
<FONT color="green">083</FONT>    <a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        private RFC5424Layout(Configuration config, Facility facility, String id, int ein, boolean includeMDC,<a name="line.85"></a>
<FONT color="green">086</FONT>                              boolean includeNL, String mdcId, String appName, String messageId, String excludes,<a name="line.86"></a>
<FONT color="green">087</FONT>                              String includes, String required, Charset charset) {<a name="line.87"></a>
<FONT color="green">088</FONT>            super(charset);<a name="line.88"></a>
<FONT color="green">089</FONT>            this.facility = facility;<a name="line.89"></a>
<FONT color="green">090</FONT>            this.defaultId = id == null ? DEFAULT_ID : id;<a name="line.90"></a>
<FONT color="green">091</FONT>            this.enterpriseNumber = ein;<a name="line.91"></a>
<FONT color="green">092</FONT>            this.includeMDC = includeMDC;<a name="line.92"></a>
<FONT color="green">093</FONT>            this.includeNewLine = includeNL;<a name="line.93"></a>
<FONT color="green">094</FONT>            this.mdcId = mdcId;<a name="line.94"></a>
<FONT color="green">095</FONT>            this.appName = appName;<a name="line.95"></a>
<FONT color="green">096</FONT>            this.messageId = messageId;<a name="line.96"></a>
<FONT color="green">097</FONT>            this.localHostName = getLocalHostname();<a name="line.97"></a>
<FONT color="green">098</FONT>            ListChecker c = null;<a name="line.98"></a>
<FONT color="green">099</FONT>            if (excludes != null) {<a name="line.99"></a>
<FONT color="green">100</FONT>                String[] array = excludes.split(",");<a name="line.100"></a>
<FONT color="green">101</FONT>                if (array.length &gt; 0) {<a name="line.101"></a>
<FONT color="green">102</FONT>                    c = new ExcludeChecker();<a name="line.102"></a>
<FONT color="green">103</FONT>                    mdcExcludes = new ArrayList&lt;String&gt;(array.length);<a name="line.103"></a>
<FONT color="green">104</FONT>                    for (String str : array) {<a name="line.104"></a>
<FONT color="green">105</FONT>                        mdcExcludes.add(str.trim());<a name="line.105"></a>
<FONT color="green">106</FONT>                    }<a name="line.106"></a>
<FONT color="green">107</FONT>                } else {<a name="line.107"></a>
<FONT color="green">108</FONT>                    mdcExcludes = null;<a name="line.108"></a>
<FONT color="green">109</FONT>                }<a name="line.109"></a>
<FONT color="green">110</FONT>            } else {<a name="line.110"></a>
<FONT color="green">111</FONT>                mdcExcludes = null;<a name="line.111"></a>
<FONT color="green">112</FONT>            }<a name="line.112"></a>
<FONT color="green">113</FONT>            if (includes != null) {<a name="line.113"></a>
<FONT color="green">114</FONT>                String[] array = includes.split(",");<a name="line.114"></a>
<FONT color="green">115</FONT>                if (array.length &gt; 0) {<a name="line.115"></a>
<FONT color="green">116</FONT>                    c = new IncludeChecker();<a name="line.116"></a>
<FONT color="green">117</FONT>                    mdcIncludes = new ArrayList&lt;String&gt;(array.length);<a name="line.117"></a>
<FONT color="green">118</FONT>                    for (String str : array) {<a name="line.118"></a>
<FONT color="green">119</FONT>                        mdcIncludes.add(str.trim());<a name="line.119"></a>
<FONT color="green">120</FONT>                    }<a name="line.120"></a>
<FONT color="green">121</FONT>                } else {<a name="line.121"></a>
<FONT color="green">122</FONT>                    mdcIncludes = null;<a name="line.122"></a>
<FONT color="green">123</FONT>                }<a name="line.123"></a>
<FONT color="green">124</FONT>            } else {<a name="line.124"></a>
<FONT color="green">125</FONT>                mdcIncludes = null;<a name="line.125"></a>
<FONT color="green">126</FONT>            }<a name="line.126"></a>
<FONT color="green">127</FONT>            if (required != null) {<a name="line.127"></a>
<FONT color="green">128</FONT>                String[] array = required.split(",");<a name="line.128"></a>
<FONT color="green">129</FONT>                if (array.length &gt; 0) {<a name="line.129"></a>
<FONT color="green">130</FONT>                    mdcRequired = new ArrayList&lt;String&gt;(array.length);<a name="line.130"></a>
<FONT color="green">131</FONT>                    for (String str : array) {<a name="line.131"></a>
<FONT color="green">132</FONT>                        mdcRequired.add(str.trim());<a name="line.132"></a>
<FONT color="green">133</FONT>                    }<a name="line.133"></a>
<FONT color="green">134</FONT>                } else {<a name="line.134"></a>
<FONT color="green">135</FONT>                    mdcRequired = null;<a name="line.135"></a>
<FONT color="green">136</FONT>                }<a name="line.136"></a>
<FONT color="green">137</FONT>    <a name="line.137"></a>
<FONT color="green">138</FONT>            } else {<a name="line.138"></a>
<FONT color="green">139</FONT>                mdcRequired = null;<a name="line.139"></a>
<FONT color="green">140</FONT>            }<a name="line.140"></a>
<FONT color="green">141</FONT>            this.checker = c != null ? c : noopChecker;<a name="line.141"></a>
<FONT color="green">142</FONT>            String name = config == null ? null : config.getName();<a name="line.142"></a>
<FONT color="green">143</FONT>            configName = (name != null &amp;&amp; name.length() &gt; 0) ? name : null;<a name="line.143"></a>
<FONT color="green">144</FONT>        }<a name="line.144"></a>
<FONT color="green">145</FONT>    <a name="line.145"></a>
<FONT color="green">146</FONT>        /**<a name="line.146"></a>
<FONT color="green">147</FONT>         * Formats a {@link org.apache.logging.log4j.core.LogEvent} in conformance with the RFC 5424 Syslog specification.<a name="line.147"></a>
<FONT color="green">148</FONT>         * @param event The LogEvent.<a name="line.148"></a>
<FONT color="green">149</FONT>         * @return The RFC 5424 String representation of the LogEvent.<a name="line.149"></a>
<FONT color="green">150</FONT>         */<a name="line.150"></a>
<FONT color="green">151</FONT>        public String formatAs(final LogEvent event) {<a name="line.151"></a>
<FONT color="green">152</FONT>            Message msg = event.getMessage();<a name="line.152"></a>
<FONT color="green">153</FONT>            boolean isStructured = msg instanceof StructuredDataMessage;<a name="line.153"></a>
<FONT color="green">154</FONT>            StringBuilder buf = new StringBuilder();<a name="line.154"></a>
<FONT color="green">155</FONT>    <a name="line.155"></a>
<FONT color="green">156</FONT>            buf.append("&lt;");<a name="line.156"></a>
<FONT color="green">157</FONT>            buf.append(Priority.getPriority(facility, event.getLevel()));<a name="line.157"></a>
<FONT color="green">158</FONT>            buf.append("&gt;1 ");<a name="line.158"></a>
<FONT color="green">159</FONT>            buf.append(computeTimeStampString(event.getMillis()));<a name="line.159"></a>
<FONT color="green">160</FONT>            buf.append(' ');<a name="line.160"></a>
<FONT color="green">161</FONT>            buf.append(localHostName);<a name="line.161"></a>
<FONT color="green">162</FONT>            buf.append(' ');<a name="line.162"></a>
<FONT color="green">163</FONT>            if (appName != null) {<a name="line.163"></a>
<FONT color="green">164</FONT>                buf.append(appName);<a name="line.164"></a>
<FONT color="green">165</FONT>            } else if (configName != null) {<a name="line.165"></a>
<FONT color="green">166</FONT>                buf.append(configName);<a name="line.166"></a>
<FONT color="green">167</FONT>            } else {<a name="line.167"></a>
<FONT color="green">168</FONT>                buf.append("-");<a name="line.168"></a>
<FONT color="green">169</FONT>            }<a name="line.169"></a>
<FONT color="green">170</FONT>            buf.append(" ");<a name="line.170"></a>
<FONT color="green">171</FONT>            buf.append(getProcId());<a name="line.171"></a>
<FONT color="green">172</FONT>            buf.append(" ");<a name="line.172"></a>
<FONT color="green">173</FONT>            String type = isStructured ? ((StructuredDataMessage) msg).getType() : null;<a name="line.173"></a>
<FONT color="green">174</FONT>            if (type != null) {<a name="line.174"></a>
<FONT color="green">175</FONT>                buf.append(type);<a name="line.175"></a>
<FONT color="green">176</FONT>            } else if (messageId != null) {<a name="line.176"></a>
<FONT color="green">177</FONT>                buf.append(messageId);<a name="line.177"></a>
<FONT color="green">178</FONT>            } else {<a name="line.178"></a>
<FONT color="green">179</FONT>                buf.append("-");<a name="line.179"></a>
<FONT color="green">180</FONT>            }<a name="line.180"></a>
<FONT color="green">181</FONT>            buf.append(" ");<a name="line.181"></a>
<FONT color="green">182</FONT>            if (isStructured || includeMDC) {<a name="line.182"></a>
<FONT color="green">183</FONT>                StructuredDataId id = null;<a name="line.183"></a>
<FONT color="green">184</FONT>                String text;<a name="line.184"></a>
<FONT color="green">185</FONT>                if (isStructured) {<a name="line.185"></a>
<FONT color="green">186</FONT>                    StructuredDataMessage data = (StructuredDataMessage) msg;<a name="line.186"></a>
<FONT color="green">187</FONT>                    Map map = data.getData();<a name="line.187"></a>
<FONT color="green">188</FONT>                    id = data.getId();<a name="line.188"></a>
<FONT color="green">189</FONT>                    formatStructuredElement(id, map, buf, noopChecker);<a name="line.189"></a>
<FONT color="green">190</FONT>                    text = data.getMessageFormat();<a name="line.190"></a>
<FONT color="green">191</FONT>                } else {<a name="line.191"></a>
<FONT color="green">192</FONT>                    text = msg.getFormattedMessage();<a name="line.192"></a>
<FONT color="green">193</FONT>                }<a name="line.193"></a>
<FONT color="green">194</FONT>                if (includeMDC) {<a name="line.194"></a>
<FONT color="green">195</FONT>                    if (mdcRequired != null) {<a name="line.195"></a>
<FONT color="green">196</FONT>                        checkRequired(event.getContextMap());<a name="line.196"></a>
<FONT color="green">197</FONT>                    }<a name="line.197"></a>
<FONT color="green">198</FONT>                    int ein = id == null || id.getEnterpriseNumber() &lt; 0 ? enterpriseNumber : id.getEnterpriseNumber();<a name="line.198"></a>
<FONT color="green">199</FONT>                    StructuredDataId mdcSDID = new StructuredDataId(mdcId, ein, null, null);<a name="line.199"></a>
<FONT color="green">200</FONT>                    formatStructuredElement(mdcSDID, event.getContextMap(), buf, checker);<a name="line.200"></a>
<FONT color="green">201</FONT>                }<a name="line.201"></a>
<FONT color="green">202</FONT>                if (text != null &amp;&amp; text.length() &gt; 0) {<a name="line.202"></a>
<FONT color="green">203</FONT>                    buf.append(" ").append(text);<a name="line.203"></a>
<FONT color="green">204</FONT>                }<a name="line.204"></a>
<FONT color="green">205</FONT>            } else {<a name="line.205"></a>
<FONT color="green">206</FONT>                buf.append("- ");<a name="line.206"></a>
<FONT color="green">207</FONT>                buf.append(msg.getFormattedMessage());<a name="line.207"></a>
<FONT color="green">208</FONT>            }<a name="line.208"></a>
<FONT color="green">209</FONT>            if (includeNewLine) {<a name="line.209"></a>
<FONT color="green">210</FONT>                buf.append("\n");<a name="line.210"></a>
<FONT color="green">211</FONT>            }<a name="line.211"></a>
<FONT color="green">212</FONT>            return buf.toString();<a name="line.212"></a>
<FONT color="green">213</FONT>        }<a name="line.213"></a>
<FONT color="green">214</FONT>    <a name="line.214"></a>
<FONT color="green">215</FONT>        protected String getProcId() {<a name="line.215"></a>
<FONT color="green">216</FONT>            return "-";<a name="line.216"></a>
<FONT color="green">217</FONT>        }<a name="line.217"></a>
<FONT color="green">218</FONT>    <a name="line.218"></a>
<FONT color="green">219</FONT>        /**<a name="line.219"></a>
<FONT color="green">220</FONT>         * This method gets the network name of the machine we are running on.<a name="line.220"></a>
<FONT color="green">221</FONT>         * Returns "UNKNOWN_LOCALHOST" in the unlikely case where the host name<a name="line.221"></a>
<FONT color="green">222</FONT>         * cannot be found.<a name="line.222"></a>
<FONT color="green">223</FONT>         *<a name="line.223"></a>
<FONT color="green">224</FONT>         * @return String the name of the local host<a name="line.224"></a>
<FONT color="green">225</FONT>         */<a name="line.225"></a>
<FONT color="green">226</FONT>        public String getLocalHostname() {<a name="line.226"></a>
<FONT color="green">227</FONT>            try {<a name="line.227"></a>
<FONT color="green">228</FONT>                InetAddress addr = InetAddress.getLocalHost();<a name="line.228"></a>
<FONT color="green">229</FONT>                return addr.getHostName();<a name="line.229"></a>
<FONT color="green">230</FONT>            } catch (UnknownHostException uhe) {<a name="line.230"></a>
<FONT color="green">231</FONT>                LOGGER.error("Could not determine local host name", uhe);<a name="line.231"></a>
<FONT color="green">232</FONT>                return "UNKNOWN_LOCALHOST";<a name="line.232"></a>
<FONT color="green">233</FONT>            }<a name="line.233"></a>
<FONT color="green">234</FONT>        }<a name="line.234"></a>
<FONT color="green">235</FONT>    <a name="line.235"></a>
<FONT color="green">236</FONT>        protected List&lt;String&gt; getMdcExcludes() {<a name="line.236"></a>
<FONT color="green">237</FONT>            return mdcExcludes;<a name="line.237"></a>
<FONT color="green">238</FONT>        }<a name="line.238"></a>
<FONT color="green">239</FONT>    <a name="line.239"></a>
<FONT color="green">240</FONT>        protected List&lt;String&gt; getMdcIncludes() {<a name="line.240"></a>
<FONT color="green">241</FONT>            return mdcIncludes;<a name="line.241"></a>
<FONT color="green">242</FONT>        }<a name="line.242"></a>
<FONT color="green">243</FONT>    <a name="line.243"></a>
<FONT color="green">244</FONT>        private String computeTimeStampString(long now) {<a name="line.244"></a>
<FONT color="green">245</FONT>            long last;<a name="line.245"></a>
<FONT color="green">246</FONT>            synchronized (this) {<a name="line.246"></a>
<FONT color="green">247</FONT>                last = lastTimestamp;<a name="line.247"></a>
<FONT color="green">248</FONT>                if (now == lastTimestamp) {<a name="line.248"></a>
<FONT color="green">249</FONT>                    return timestamppStr;<a name="line.249"></a>
<FONT color="green">250</FONT>                }<a name="line.250"></a>
<FONT color="green">251</FONT>            }<a name="line.251"></a>
<FONT color="green">252</FONT>    <a name="line.252"></a>
<FONT color="green">253</FONT>            StringBuilder buf = new StringBuilder();<a name="line.253"></a>
<FONT color="green">254</FONT>            Calendar cal = new GregorianCalendar();<a name="line.254"></a>
<FONT color="green">255</FONT>            cal.setTimeInMillis(now);<a name="line.255"></a>
<FONT color="green">256</FONT>            buf.append(Integer.toString(cal.get(Calendar.YEAR)));<a name="line.256"></a>
<FONT color="green">257</FONT>            buf.append("-");<a name="line.257"></a>
<FONT color="green">258</FONT>            pad(cal.get(Calendar.MONTH) + 1, TWO_DIGITS, buf);<a name="line.258"></a>
<FONT color="green">259</FONT>            buf.append("-");<a name="line.259"></a>
<FONT color="green">260</FONT>            pad(cal.get(Calendar.DAY_OF_MONTH), TWO_DIGITS, buf);<a name="line.260"></a>
<FONT color="green">261</FONT>            buf.append("T");<a name="line.261"></a>
<FONT color="green">262</FONT>            pad(cal.get(Calendar.HOUR_OF_DAY), TWO_DIGITS, buf);<a name="line.262"></a>
<FONT color="green">263</FONT>            buf.append(":");<a name="line.263"></a>
<FONT color="green">264</FONT>            pad(cal.get(Calendar.MINUTE), TWO_DIGITS, buf);<a name="line.264"></a>
<FONT color="green">265</FONT>            buf.append(":");<a name="line.265"></a>
<FONT color="green">266</FONT>            pad(cal.get(Calendar.SECOND), TWO_DIGITS, buf);<a name="line.266"></a>
<FONT color="green">267</FONT>    <a name="line.267"></a>
<FONT color="green">268</FONT>            int millis = cal.get(Calendar.MILLISECOND);<a name="line.268"></a>
<FONT color="green">269</FONT>            if (millis != 0) {<a name="line.269"></a>
<FONT color="green">270</FONT>                buf.append(".");<a name="line.270"></a>
<FONT color="green">271</FONT>                pad(millis, THREE_DIGITS, buf);<a name="line.271"></a>
<FONT color="green">272</FONT>            }<a name="line.272"></a>
<FONT color="green">273</FONT>    <a name="line.273"></a>
<FONT color="green">274</FONT>            int tzmin = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / MILLIS_PER_MINUTE;<a name="line.274"></a>
<FONT color="green">275</FONT>            if (tzmin == 0) {<a name="line.275"></a>
<FONT color="green">276</FONT>                buf.append("Z");<a name="line.276"></a>
<FONT color="green">277</FONT>            } else {<a name="line.277"></a>
<FONT color="green">278</FONT>                if (tzmin &lt; 0) {<a name="line.278"></a>
<FONT color="green">279</FONT>                    tzmin = -tzmin;<a name="line.279"></a>
<FONT color="green">280</FONT>                    buf.append("-");<a name="line.280"></a>
<FONT color="green">281</FONT>                } else {<a name="line.281"></a>
<FONT color="green">282</FONT>                    buf.append("+");<a name="line.282"></a>
<FONT color="green">283</FONT>                }<a name="line.283"></a>
<FONT color="green">284</FONT>                int tzhour = tzmin / MINUTES_PER_HOUR;<a name="line.284"></a>
<FONT color="green">285</FONT>                tzmin -= tzhour * MINUTES_PER_HOUR;<a name="line.285"></a>
<FONT color="green">286</FONT>                pad(tzhour, TWO_DIGITS, buf);<a name="line.286"></a>
<FONT color="green">287</FONT>                buf.append(":");<a name="line.287"></a>
<FONT color="green">288</FONT>                pad(tzmin, TWO_DIGITS, buf);<a name="line.288"></a>
<FONT color="green">289</FONT>            }<a name="line.289"></a>
<FONT color="green">290</FONT>            synchronized (this) {<a name="line.290"></a>
<FONT color="green">291</FONT>                if (last == lastTimestamp) {<a name="line.291"></a>
<FONT color="green">292</FONT>                    lastTimestamp = now;<a name="line.292"></a>
<FONT color="green">293</FONT>                    timestamppStr = buf.toString();<a name="line.293"></a>
<FONT color="green">294</FONT>                }<a name="line.294"></a>
<FONT color="green">295</FONT>            }<a name="line.295"></a>
<FONT color="green">296</FONT>            return buf.toString();<a name="line.296"></a>
<FONT color="green">297</FONT>        }<a name="line.297"></a>
<FONT color="green">298</FONT>    <a name="line.298"></a>
<FONT color="green">299</FONT>        private void pad(int val, int max, StringBuilder buf) {<a name="line.299"></a>
<FONT color="green">300</FONT>            while (max &gt; 1) {<a name="line.300"></a>
<FONT color="green">301</FONT>                if (val &lt; max) {<a name="line.301"></a>
<FONT color="green">302</FONT>                    buf.append("0");<a name="line.302"></a>
<FONT color="green">303</FONT>                }<a name="line.303"></a>
<FONT color="green">304</FONT>                max = max / TWO_DIGITS;<a name="line.304"></a>
<FONT color="green">305</FONT>            }<a name="line.305"></a>
<FONT color="green">306</FONT>            buf.append(Integer.toString(val));<a name="line.306"></a>
<FONT color="green">307</FONT>        }<a name="line.307"></a>
<FONT color="green">308</FONT>    <a name="line.308"></a>
<FONT color="green">309</FONT>        private void formatStructuredElement(StructuredDataId id, Map&lt;String, String&gt; data, StringBuilder sb,<a name="line.309"></a>
<FONT color="green">310</FONT>                                             ListChecker checker) {<a name="line.310"></a>
<FONT color="green">311</FONT>            if (id == null &amp;&amp; defaultId == null) {<a name="line.311"></a>
<FONT color="green">312</FONT>                return;<a name="line.312"></a>
<FONT color="green">313</FONT>            }<a name="line.313"></a>
<FONT color="green">314</FONT>            sb.append("[");<a name="line.314"></a>
<FONT color="green">315</FONT>            sb.append(getId(id));<a name="line.315"></a>
<FONT color="green">316</FONT>            appendMap(data, sb, checker);<a name="line.316"></a>
<FONT color="green">317</FONT>            sb.append("]");<a name="line.317"></a>
<FONT color="green">318</FONT>        }<a name="line.318"></a>
<FONT color="green">319</FONT>    <a name="line.319"></a>
<FONT color="green">320</FONT>        private String getId(StructuredDataId id) {<a name="line.320"></a>
<FONT color="green">321</FONT>            StringBuilder sb = new StringBuilder();<a name="line.321"></a>
<FONT color="green">322</FONT>            if (id.getName() == null) {<a name="line.322"></a>
<FONT color="green">323</FONT>                sb.append(defaultId);<a name="line.323"></a>
<FONT color="green">324</FONT>            } else {<a name="line.324"></a>
<FONT color="green">325</FONT>                sb.append(id.getName());<a name="line.325"></a>
<FONT color="green">326</FONT>            }<a name="line.326"></a>
<FONT color="green">327</FONT>            int ein = id.getEnterpriseNumber();<a name="line.327"></a>
<FONT color="green">328</FONT>            if (ein &lt; 0) {<a name="line.328"></a>
<FONT color="green">329</FONT>                ein = enterpriseNumber;<a name="line.329"></a>
<FONT color="green">330</FONT>            }<a name="line.330"></a>
<FONT color="green">331</FONT>            if (ein &gt;= 0) {<a name="line.331"></a>
<FONT color="green">332</FONT>                sb.append("@").append(ein);<a name="line.332"></a>
<FONT color="green">333</FONT>            }<a name="line.333"></a>
<FONT color="green">334</FONT>            return sb.toString();<a name="line.334"></a>
<FONT color="green">335</FONT>        }<a name="line.335"></a>
<FONT color="green">336</FONT>    <a name="line.336"></a>
<FONT color="green">337</FONT>        private void checkRequired(Map&lt;String, String&gt; map) {<a name="line.337"></a>
<FONT color="green">338</FONT>            for (String key : mdcRequired) {<a name="line.338"></a>
<FONT color="green">339</FONT>                String value = map.get(key);<a name="line.339"></a>
<FONT color="green">340</FONT>                if (value == null) {<a name="line.340"></a>
<FONT color="green">341</FONT>                    throw new LoggingException("Required key " + key + " is missing from the " + mdcId);<a name="line.341"></a>
<FONT color="green">342</FONT>                }<a name="line.342"></a>
<FONT color="green">343</FONT>            }<a name="line.343"></a>
<FONT color="green">344</FONT>        }<a name="line.344"></a>
<FONT color="green">345</FONT>    <a name="line.345"></a>
<FONT color="green">346</FONT>        private void appendMap(Map&lt;String, String&gt; map, StringBuilder sb, ListChecker checker)<a name="line.346"></a>
<FONT color="green">347</FONT>        {<a name="line.347"></a>
<FONT color="green">348</FONT>            SortedMap&lt;String, String&gt; sorted = new TreeMap&lt;String, String&gt;(map);<a name="line.348"></a>
<FONT color="green">349</FONT>            for (Map.Entry&lt;String, String&gt; entry : sorted.entrySet()) {<a name="line.349"></a>
<FONT color="green">350</FONT>                if (checker.check(entry.getKey())) {<a name="line.350"></a>
<FONT color="green">351</FONT>                    sb.append(" ");<a name="line.351"></a>
<FONT color="green">352</FONT>                    sb.append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"");<a name="line.352"></a>
<FONT color="green">353</FONT>                }<a name="line.353"></a>
<FONT color="green">354</FONT>            }<a name="line.354"></a>
<FONT color="green">355</FONT>        }<a name="line.355"></a>
<FONT color="green">356</FONT>    <a name="line.356"></a>
<FONT color="green">357</FONT>        /**<a name="line.357"></a>
<FONT color="green">358</FONT>         * Interface used to check keys in a Map.<a name="line.358"></a>
<FONT color="green">359</FONT>         */<a name="line.359"></a>
<FONT color="green">360</FONT>        private interface ListChecker {<a name="line.360"></a>
<FONT color="green">361</FONT>            boolean check(String key);<a name="line.361"></a>
<FONT color="green">362</FONT>        }<a name="line.362"></a>
<FONT color="green">363</FONT>    <a name="line.363"></a>
<FONT color="green">364</FONT>        /**<a name="line.364"></a>
<FONT color="green">365</FONT>         * Includes only the listed keys.<a name="line.365"></a>
<FONT color="green">366</FONT>         */<a name="line.366"></a>
<FONT color="green">367</FONT>        private class IncludeChecker implements ListChecker {<a name="line.367"></a>
<FONT color="green">368</FONT>            public boolean check(String key) {<a name="line.368"></a>
<FONT color="green">369</FONT>                return mdcIncludes.contains(key);<a name="line.369"></a>
<FONT color="green">370</FONT>            }<a name="line.370"></a>
<FONT color="green">371</FONT>        }<a name="line.371"></a>
<FONT color="green">372</FONT>    <a name="line.372"></a>
<FONT color="green">373</FONT>        /**<a name="line.373"></a>
<FONT color="green">374</FONT>         * Excludes the listed keys.<a name="line.374"></a>
<FONT color="green">375</FONT>         */<a name="line.375"></a>
<FONT color="green">376</FONT>        private class ExcludeChecker implements ListChecker {<a name="line.376"></a>
<FONT color="green">377</FONT>            public boolean check(String key) {<a name="line.377"></a>
<FONT color="green">378</FONT>                return !mdcExcludes.contains(key);<a name="line.378"></a>
<FONT color="green">379</FONT>            }<a name="line.379"></a>
<FONT color="green">380</FONT>        }<a name="line.380"></a>
<FONT color="green">381</FONT>    <a name="line.381"></a>
<FONT color="green">382</FONT>        /**<a name="line.382"></a>
<FONT color="green">383</FONT>         * Does nothing.<a name="line.383"></a>
<FONT color="green">384</FONT>         */<a name="line.384"></a>
<FONT color="green">385</FONT>        private class NoopChecker implements ListChecker {<a name="line.385"></a>
<FONT color="green">386</FONT>            public boolean check(String key) {<a name="line.386"></a>
<FONT color="green">387</FONT>                return true;<a name="line.387"></a>
<FONT color="green">388</FONT>            }<a name="line.388"></a>
<FONT color="green">389</FONT>        }<a name="line.389"></a>
<FONT color="green">390</FONT>    <a name="line.390"></a>
<FONT color="green">391</FONT>        @Override<a name="line.391"></a>
<FONT color="green">392</FONT>        public String toString() {<a name="line.392"></a>
<FONT color="green">393</FONT>            StringBuilder sb = new StringBuilder();<a name="line.393"></a>
<FONT color="green">394</FONT>            sb.append("facility=").append(facility.name());<a name="line.394"></a>
<FONT color="green">395</FONT>            sb.append(" appName=").append(appName);<a name="line.395"></a>
<FONT color="green">396</FONT>            sb.append(" defaultId=").append(defaultId);<a name="line.396"></a>
<FONT color="green">397</FONT>            sb.append(" enterpriseNumber=").append(enterpriseNumber);<a name="line.397"></a>
<FONT color="green">398</FONT>            sb.append(" newLine=").append(includeNewLine);<a name="line.398"></a>
<FONT color="green">399</FONT>            sb.append(" includeMDC=").append(includeMDC);<a name="line.399"></a>
<FONT color="green">400</FONT>            sb.append(" messageId=").append(messageId);<a name="line.400"></a>
<FONT color="green">401</FONT>            return sb.toString();<a name="line.401"></a>
<FONT color="green">402</FONT>        }<a name="line.402"></a>
<FONT color="green">403</FONT>    <a name="line.403"></a>
<FONT color="green">404</FONT>        /**<a name="line.404"></a>
<FONT color="green">405</FONT>         * Create the RFC 5424 Layout.<a name="line.405"></a>
<FONT color="green">406</FONT>         * @param facility The Facility is used to try to classify the message.<a name="line.406"></a>
<FONT color="green">407</FONT>         * @param id The default structured data id to use when formatting according to RFC 5424.<a name="line.407"></a>
<FONT color="green">408</FONT>         * @param ein The IANA enterprise number.<a name="line.408"></a>
<FONT color="green">409</FONT>         * @param includeMDC Indicates whether data from the ThreadContextMap will be included in the RFC 5424 Syslog<a name="line.409"></a>
<FONT color="green">410</FONT>         * record. Defaults to "true:.<a name="line.410"></a>
<FONT color="green">411</FONT>         * @param mdcId The id to use for the MDC Structured Data Element.<a name="line.411"></a>
<FONT color="green">412</FONT>         * @param includeNL If true, a newline will be appended to the end of the syslog record. The default is false.<a name="line.412"></a>
<FONT color="green">413</FONT>         * @param appName The value to use as the APP-NAME in the RFC 5424 syslog record.<a name="line.413"></a>
<FONT color="green">414</FONT>         * @param msgId The default value to be used in the MSGID field of RFC 5424 syslog records.<a name="line.414"></a>
<FONT color="green">415</FONT>         * @param excludes A comma separated list of mdc keys that should be excluded from the LogEvent.<a name="line.415"></a>
<FONT color="green">416</FONT>         * @param includes A comma separated list of mdc keys that should be included in the FlumeEvent.<a name="line.416"></a>
<FONT color="green">417</FONT>         * @param required A comma separated list of mdc keys that must be present in the MDC.<a name="line.417"></a>
<FONT color="green">418</FONT>         * @param charset The character set.<a name="line.418"></a>
<FONT color="green">419</FONT>         * @param config The Configuration. Some Converters require access to the Interpolator.<a name="line.419"></a>
<FONT color="green">420</FONT>         * @return An RFC5424Layout.<a name="line.420"></a>
<FONT color="green">421</FONT>         */<a name="line.421"></a>
<FONT color="green">422</FONT>        @PluginFactory<a name="line.422"></a>
<FONT color="green">423</FONT>        public static RFC5424Layout createLayout(@PluginAttr("facility") String facility,<a name="line.423"></a>
<FONT color="green">424</FONT>                                                 @PluginAttr("id") String id,<a name="line.424"></a>
<FONT color="green">425</FONT>                                                 @PluginAttr("enterpriseNumber") String ein,<a name="line.425"></a>
<FONT color="green">426</FONT>                                                 @PluginAttr("includeMDC") String includeMDC,<a name="line.426"></a>
<FONT color="green">427</FONT>                                                 @PluginAttr("mdcId") String mdcId,<a name="line.427"></a>
<FONT color="green">428</FONT>                                                 @PluginAttr("newLine") String includeNL,<a name="line.428"></a>
<FONT color="green">429</FONT>                                                 @PluginAttr("appName") String appName,<a name="line.429"></a>
<FONT color="green">430</FONT>                                                 @PluginAttr("messageId") String msgId,<a name="line.430"></a>
<FONT color="green">431</FONT>                                                 @PluginAttr("mdcExcludes") String excludes,<a name="line.431"></a>
<FONT color="green">432</FONT>                                                 @PluginAttr("mdcIncludes") String includes,<a name="line.432"></a>
<FONT color="green">433</FONT>                                                 @PluginAttr("mdcRequired") String required,<a name="line.433"></a>
<FONT color="green">434</FONT>                                                 @PluginAttr("charset") String charset,<a name="line.434"></a>
<FONT color="green">435</FONT>                                                 @PluginConfiguration Configuration config) {<a name="line.435"></a>
<FONT color="green">436</FONT>            Charset c = Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset();<a name="line.436"></a>
<FONT color="green">437</FONT>            if (charset != null) {<a name="line.437"></a>
<FONT color="green">438</FONT>                if (Charset.isSupported(charset)) {<a name="line.438"></a>
<FONT color="green">439</FONT>                    c = Charset.forName(charset);<a name="line.439"></a>
<FONT color="green">440</FONT>                } else {<a name="line.440"></a>
<FONT color="green">441</FONT>                    LOGGER.error("Charset " + charset + " is not supported for layout, using " + c.displayName());<a name="line.441"></a>
<FONT color="green">442</FONT>                }<a name="line.442"></a>
<FONT color="green">443</FONT>            }<a name="line.443"></a>
<FONT color="green">444</FONT>            if (includes != null &amp;&amp; excludes != null) {<a name="line.444"></a>
<FONT color="green">445</FONT>                LOGGER.error("mdcIncludes and mdcExcludes are mutually exclusive. Includes wil be ignored");<a name="line.445"></a>
<FONT color="green">446</FONT>                includes = null;<a name="line.446"></a>
<FONT color="green">447</FONT>            }<a name="line.447"></a>
<FONT color="green">448</FONT>            Facility f = facility != null ? Facility.valueOf(facility.toUpperCase()) : Facility.LOCAL0;<a name="line.448"></a>
<FONT color="green">449</FONT>            int enterpriseNumber = ein == null ? DEFAULT_ENTERPRISE_NUMBER : Integer.parseInt(ein);<a name="line.449"></a>
<FONT color="green">450</FONT>            boolean isMdc = includeMDC == null ? true : Boolean.valueOf(includeMDC);<a name="line.450"></a>
<FONT color="green">451</FONT>            boolean includeNewLine = includeNL == null ? false : Boolean.valueOf(includeNL);<a name="line.451"></a>
<FONT color="green">452</FONT>            if (mdcId == null) {<a name="line.452"></a>
<FONT color="green">453</FONT>                mdcId = DEFAULT_MDCID;<a name="line.453"></a>
<FONT color="green">454</FONT>            }<a name="line.454"></a>
<FONT color="green">455</FONT>    <a name="line.455"></a>
<FONT color="green">456</FONT>            return new RFC5424Layout(config, f, id, enterpriseNumber, isMdc, includeNewLine, mdcId, appName, msgId,<a name="line.456"></a>
<FONT color="green">457</FONT>                                     excludes, includes, required, c);<a name="line.457"></a>
<FONT color="green">458</FONT>        }<a name="line.458"></a>
<FONT color="green">459</FONT>    }<a name="line.459"></a>




























































</PRE>
</BODY>
</HTML>
