<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.core.layout;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.nio.charset.Charset;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.nio.charset.StandardCharsets;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.Calendar;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.GregorianCalendar;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.HashMap;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.SortedMap;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.TreeMap;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.regex.Matcher;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.regex.Pattern;<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.logging.log4j.Level;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.logging.log4j.LoggingException;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.logging.log4j.core.Layout;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.logging.log4j.core.LogEvent;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.logging.log4j.core.appender.TlsSyslogFrame;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.logging.log4j.core.config.Configuration;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.logging.log4j.core.layout.internal.ExcludeChecker;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.logging.log4j.core.layout.internal.IncludeChecker;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.logging.log4j.core.layout.internal.ListChecker;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.logging.log4j.core.config.Node;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.logging.log4j.core.config.plugins.Plugin;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.logging.log4j.core.config.plugins.PluginAttribute;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.logging.log4j.core.config.plugins.PluginElement;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.logging.log4j.core.config.plugins.PluginFactory;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.logging.log4j.core.net.Facility;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.logging.log4j.core.net.Priority;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.logging.log4j.core.pattern.PatternConverter;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.logging.log4j.core.pattern.PatternFormatter;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.logging.log4j.core.pattern.PatternParser;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.logging.log4j.core.util.NetUtils;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.logging.log4j.core.util.Patterns;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.logging.log4j.message.Message;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.logging.log4j.message.MessageCollectionMessage;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.logging.log4j.message.StructuredDataCollectionMessage;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.logging.log4j.message.StructuredDataId;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.logging.log4j.message.StructuredDataMessage;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.logging.log4j.util.ProcessIdUtil;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.logging.log4j.util.StringBuilders;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.logging.log4j.util.Strings;<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
<span class="sourceLineNo">066</span> * Formats a log event in accordance with RFC 5424.<a name="line.66"></a>
<span class="sourceLineNo">067</span> *<a name="line.67"></a>
<span class="sourceLineNo">068</span> * @see &lt;a href="https://tools.ietf.org/html/rfc5424"&gt;RFC 5424&lt;/a&gt;<a name="line.68"></a>
<span class="sourceLineNo">069</span> */<a name="line.69"></a>
<span class="sourceLineNo">070</span>@Plugin(name = "Rfc5424Layout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)<a name="line.70"></a>
<span class="sourceLineNo">071</span>public final class Rfc5424Layout extends AbstractStringLayout {<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * Not a very good default - it is the Apache Software Foundation's enterprise number.<a name="line.74"></a>
<span class="sourceLineNo">075</span>     */<a name="line.75"></a>
<span class="sourceLineNo">076</span>    public static final int DEFAULT_ENTERPRISE_NUMBER = 18060;<a name="line.76"></a>
<span class="sourceLineNo">077</span>    /**<a name="line.77"></a>
<span class="sourceLineNo">078</span>     * The default event id.<a name="line.78"></a>
<span class="sourceLineNo">079</span>     */<a name="line.79"></a>
<span class="sourceLineNo">080</span>    public static final String DEFAULT_ID = "Audit";<a name="line.80"></a>
<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * Match newlines in a platform-independent manner.<a name="line.82"></a>
<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
<span class="sourceLineNo">084</span>    public static final Pattern NEWLINE_PATTERN = Pattern.compile("\\r?\\n");<a name="line.84"></a>
<span class="sourceLineNo">085</span>    /**<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * Match characters which require escaping.<a name="line.86"></a>
<span class="sourceLineNo">087</span>     */<a name="line.87"></a>
<span class="sourceLineNo">088</span>    public static final Pattern PARAM_VALUE_ESCAPE_PATTERN = Pattern.compile("[\\\"\\]\\\\]");<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>    /**<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * Default MDC ID: {@value} .<a name="line.91"></a>
<span class="sourceLineNo">092</span>     */<a name="line.92"></a>
<span class="sourceLineNo">093</span>    public static final String DEFAULT_MDCID = "mdc";<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>    private static final String LF = "\n";<a name="line.95"></a>
<span class="sourceLineNo">096</span>    private static final int TWO_DIGITS = 10;<a name="line.96"></a>
<span class="sourceLineNo">097</span>    private static final int THREE_DIGITS = 100;<a name="line.97"></a>
<span class="sourceLineNo">098</span>    private static final int MILLIS_PER_MINUTE = 60000;<a name="line.98"></a>
<span class="sourceLineNo">099</span>    private static final int MINUTES_PER_HOUR = 60;<a name="line.99"></a>
<span class="sourceLineNo">100</span>    private static final String COMPONENT_KEY = "RFC5424-Converter";<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>    private final Facility facility;<a name="line.102"></a>
<span class="sourceLineNo">103</span>    private final String defaultId;<a name="line.103"></a>
<span class="sourceLineNo">104</span>    private final int enterpriseNumber;<a name="line.104"></a>
<span class="sourceLineNo">105</span>    private final boolean includeMdc;<a name="line.105"></a>
<span class="sourceLineNo">106</span>    private final String mdcId;<a name="line.106"></a>
<span class="sourceLineNo">107</span>    private final StructuredDataId mdcSdId;<a name="line.107"></a>
<span class="sourceLineNo">108</span>    private final String localHostName;<a name="line.108"></a>
<span class="sourceLineNo">109</span>    private final String appName;<a name="line.109"></a>
<span class="sourceLineNo">110</span>    private final String messageId;<a name="line.110"></a>
<span class="sourceLineNo">111</span>    private final String configName;<a name="line.111"></a>
<span class="sourceLineNo">112</span>    private final String mdcPrefix;<a name="line.112"></a>
<span class="sourceLineNo">113</span>    private final String eventPrefix;<a name="line.113"></a>
<span class="sourceLineNo">114</span>    private final List&lt;String&gt; mdcExcludes;<a name="line.114"></a>
<span class="sourceLineNo">115</span>    private final List&lt;String&gt; mdcIncludes;<a name="line.115"></a>
<span class="sourceLineNo">116</span>    private final List&lt;String&gt; mdcRequired;<a name="line.116"></a>
<span class="sourceLineNo">117</span>    private final ListChecker listChecker;<a name="line.117"></a>
<span class="sourceLineNo">118</span>    private final boolean includeNewLine;<a name="line.118"></a>
<span class="sourceLineNo">119</span>    private final String escapeNewLine;<a name="line.119"></a>
<span class="sourceLineNo">120</span>    private final boolean useTlsMessageFormat;<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>    private long lastTimestamp = -1;<a name="line.122"></a>
<span class="sourceLineNo">123</span>    private String timestamppStr;<a name="line.123"></a>
<span class="sourceLineNo">124</span><a name="line.124"></a>
<span class="sourceLineNo">125</span>    private final List&lt;PatternFormatter&gt; exceptionFormatters;<a name="line.125"></a>
<span class="sourceLineNo">126</span>    private final Map&lt;String, FieldFormatter&gt; fieldFormatters;<a name="line.126"></a>
<span class="sourceLineNo">127</span>    private final String procId;<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>    private Rfc5424Layout(final Configuration config, final Facility facility, final String id, final int ein,<a name="line.129"></a>
<span class="sourceLineNo">130</span>            final boolean includeMDC, final boolean includeNL, final String escapeNL, final String mdcId,<a name="line.130"></a>
<span class="sourceLineNo">131</span>            final String mdcPrefix, final String eventPrefix, final String appName, final String messageId,<a name="line.131"></a>
<span class="sourceLineNo">132</span>            final String excludes, final String includes, final String required, final Charset charset,<a name="line.132"></a>
<span class="sourceLineNo">133</span>            final String exceptionPattern, final boolean useTLSMessageFormat, final LoggerFields[] loggerFields) {<a name="line.133"></a>
<span class="sourceLineNo">134</span>        super(charset);<a name="line.134"></a>
<span class="sourceLineNo">135</span>        final PatternParser exceptionParser = createPatternParser(config, ThrowablePatternConverter.class);<a name="line.135"></a>
<span class="sourceLineNo">136</span>        exceptionFormatters = exceptionPattern == null ? null : exceptionParser.parse(exceptionPattern);<a name="line.136"></a>
<span class="sourceLineNo">137</span>        this.facility = facility;<a name="line.137"></a>
<span class="sourceLineNo">138</span>        this.defaultId = id == null ? DEFAULT_ID : id;<a name="line.138"></a>
<span class="sourceLineNo">139</span>        this.enterpriseNumber = ein;<a name="line.139"></a>
<span class="sourceLineNo">140</span>        this.includeMdc = includeMDC;<a name="line.140"></a>
<span class="sourceLineNo">141</span>        this.includeNewLine = includeNL;<a name="line.141"></a>
<span class="sourceLineNo">142</span>        this.escapeNewLine = escapeNL == null ? null : Matcher.quoteReplacement(escapeNL);<a name="line.142"></a>
<span class="sourceLineNo">143</span>        this.mdcId = mdcId != null ? mdcId : id == null ? DEFAULT_MDCID : id;<a name="line.143"></a>
<span class="sourceLineNo">144</span>        this.mdcSdId = new StructuredDataId(this.mdcId, enterpriseNumber, null, null);<a name="line.144"></a>
<span class="sourceLineNo">145</span>        this.mdcPrefix = mdcPrefix;<a name="line.145"></a>
<span class="sourceLineNo">146</span>        this.eventPrefix = eventPrefix;<a name="line.146"></a>
<span class="sourceLineNo">147</span>        this.appName = appName;<a name="line.147"></a>
<span class="sourceLineNo">148</span>        this.messageId = messageId;<a name="line.148"></a>
<span class="sourceLineNo">149</span>        this.useTlsMessageFormat = useTLSMessageFormat;<a name="line.149"></a>
<span class="sourceLineNo">150</span>        this.localHostName = NetUtils.getLocalHostname();<a name="line.150"></a>
<span class="sourceLineNo">151</span>        ListChecker checker = null;<a name="line.151"></a>
<span class="sourceLineNo">152</span>        if (excludes != null) {<a name="line.152"></a>
<span class="sourceLineNo">153</span>            final String[] array = excludes.split(Patterns.COMMA_SEPARATOR);<a name="line.153"></a>
<span class="sourceLineNo">154</span>            if (array.length &gt; 0) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>                mdcExcludes = new ArrayList&lt;&gt;(array.length);<a name="line.155"></a>
<span class="sourceLineNo">156</span>                for (final String str : array) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>                    mdcExcludes.add(str.trim());<a name="line.157"></a>
<span class="sourceLineNo">158</span>                }<a name="line.158"></a>
<span class="sourceLineNo">159</span>                checker = new ExcludeChecker(mdcExcludes);<a name="line.159"></a>
<span class="sourceLineNo">160</span>            } else {<a name="line.160"></a>
<span class="sourceLineNo">161</span>                mdcExcludes = null;<a name="line.161"></a>
<span class="sourceLineNo">162</span>            }<a name="line.162"></a>
<span class="sourceLineNo">163</span>        } else {<a name="line.163"></a>
<span class="sourceLineNo">164</span>            mdcExcludes = null;<a name="line.164"></a>
<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
<span class="sourceLineNo">166</span>        if (includes != null) {<a name="line.166"></a>
<span class="sourceLineNo">167</span>            final String[] array = includes.split(Patterns.COMMA_SEPARATOR);<a name="line.167"></a>
<span class="sourceLineNo">168</span>            if (array.length &gt; 0) {<a name="line.168"></a>
<span class="sourceLineNo">169</span>                mdcIncludes = new ArrayList&lt;&gt;(array.length);<a name="line.169"></a>
<span class="sourceLineNo">170</span>                for (final String str : array) {<a name="line.170"></a>
<span class="sourceLineNo">171</span>                    mdcIncludes.add(str.trim());<a name="line.171"></a>
<span class="sourceLineNo">172</span>                }<a name="line.172"></a>
<span class="sourceLineNo">173</span>                checker = new IncludeChecker(mdcIncludes);<a name="line.173"></a>
<span class="sourceLineNo">174</span>            } else {<a name="line.174"></a>
<span class="sourceLineNo">175</span>                mdcIncludes = null;<a name="line.175"></a>
<span class="sourceLineNo">176</span>            }<a name="line.176"></a>
<span class="sourceLineNo">177</span>        } else {<a name="line.177"></a>
<span class="sourceLineNo">178</span>            mdcIncludes = null;<a name="line.178"></a>
<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
<span class="sourceLineNo">180</span>        if (required != null) {<a name="line.180"></a>
<span class="sourceLineNo">181</span>            final String[] array = required.split(Patterns.COMMA_SEPARATOR);<a name="line.181"></a>
<span class="sourceLineNo">182</span>            if (array.length &gt; 0) {<a name="line.182"></a>
<span class="sourceLineNo">183</span>                mdcRequired = new ArrayList&lt;&gt;(array.length);<a name="line.183"></a>
<span class="sourceLineNo">184</span>                for (final String str : array) {<a name="line.184"></a>
<span class="sourceLineNo">185</span>                    mdcRequired.add(str.trim());<a name="line.185"></a>
<span class="sourceLineNo">186</span>                }<a name="line.186"></a>
<span class="sourceLineNo">187</span>            } else {<a name="line.187"></a>
<span class="sourceLineNo">188</span>                mdcRequired = null;<a name="line.188"></a>
<span class="sourceLineNo">189</span>            }<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
<span class="sourceLineNo">191</span>        } else {<a name="line.191"></a>
<span class="sourceLineNo">192</span>            mdcRequired = null;<a name="line.192"></a>
<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
<span class="sourceLineNo">194</span>        this.listChecker = checker != null ? checker : ListChecker.NOOP_CHECKER;<a name="line.194"></a>
<span class="sourceLineNo">195</span>        final String name = config == null ? null : config.getName();<a name="line.195"></a>
<span class="sourceLineNo">196</span>        configName = Strings.isNotEmpty(name) ? name : null;<a name="line.196"></a>
<span class="sourceLineNo">197</span>        this.fieldFormatters = createFieldFormatters(loggerFields, config);<a name="line.197"></a>
<span class="sourceLineNo">198</span>        this.procId = ProcessIdUtil.getProcessId();<a name="line.198"></a>
<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
<span class="sourceLineNo">200</span><a name="line.200"></a>
<span class="sourceLineNo">201</span>    private Map&lt;String, FieldFormatter&gt; createFieldFormatters(final LoggerFields[] loggerFields,<a name="line.201"></a>
<span class="sourceLineNo">202</span>            final Configuration config) {<a name="line.202"></a>
<span class="sourceLineNo">203</span>        final Map&lt;String, FieldFormatter&gt; sdIdMap = new HashMap&lt;&gt;(loggerFields == null ? 0 : loggerFields.length);<a name="line.203"></a>
<span class="sourceLineNo">204</span>        if (loggerFields != null) {<a name="line.204"></a>
<span class="sourceLineNo">205</span>            for (final LoggerFields loggerField : loggerFields) {<a name="line.205"></a>
<span class="sourceLineNo">206</span>                final StructuredDataId key = loggerField.getSdId() == null ? mdcSdId : loggerField.getSdId();<a name="line.206"></a>
<span class="sourceLineNo">207</span>                final Map&lt;String, List&lt;PatternFormatter&gt;&gt; sdParams = new HashMap&lt;&gt;();<a name="line.207"></a>
<span class="sourceLineNo">208</span>                final Map&lt;String, String&gt; fields = loggerField.getMap();<a name="line.208"></a>
<span class="sourceLineNo">209</span>                if (!fields.isEmpty()) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                    final PatternParser fieldParser = createPatternParser(config, null);<a name="line.210"></a>
<span class="sourceLineNo">211</span><a name="line.211"></a>
<span class="sourceLineNo">212</span>                    for (final Map.Entry&lt;String, String&gt; entry : fields.entrySet()) {<a name="line.212"></a>
<span class="sourceLineNo">213</span>                        final List&lt;PatternFormatter&gt; formatters = fieldParser.parse(entry.getValue());<a name="line.213"></a>
<span class="sourceLineNo">214</span>                        sdParams.put(entry.getKey(), formatters);<a name="line.214"></a>
<span class="sourceLineNo">215</span>                    }<a name="line.215"></a>
<span class="sourceLineNo">216</span>                    final FieldFormatter fieldFormatter = new FieldFormatter(sdParams,<a name="line.216"></a>
<span class="sourceLineNo">217</span>                            loggerField.getDiscardIfAllFieldsAreEmpty());<a name="line.217"></a>
<span class="sourceLineNo">218</span>                    sdIdMap.put(key.toString(), fieldFormatter);<a name="line.218"></a>
<span class="sourceLineNo">219</span>                }<a name="line.219"></a>
<span class="sourceLineNo">220</span>            }<a name="line.220"></a>
<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
<span class="sourceLineNo">222</span>        return sdIdMap.size() &gt; 0 ? sdIdMap : null;<a name="line.222"></a>
<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
<span class="sourceLineNo">224</span><a name="line.224"></a>
<span class="sourceLineNo">225</span>    /**<a name="line.225"></a>
<span class="sourceLineNo">226</span>     * Create a PatternParser.<a name="line.226"></a>
<span class="sourceLineNo">227</span>     *<a name="line.227"></a>
<span class="sourceLineNo">228</span>     * @param config The Configuration.<a name="line.228"></a>
<span class="sourceLineNo">229</span>     * @param filterClass Filter the returned plugins after calling the plugin manager.<a name="line.229"></a>
<span class="sourceLineNo">230</span>     * @return The PatternParser.<a name="line.230"></a>
<span class="sourceLineNo">231</span>     */<a name="line.231"></a>
<span class="sourceLineNo">232</span>    private static PatternParser createPatternParser(final Configuration config,<a name="line.232"></a>
<span class="sourceLineNo">233</span>            final Class&lt;? extends PatternConverter&gt; filterClass) {<a name="line.233"></a>
<span class="sourceLineNo">234</span>        if (config == null) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>            return new PatternParser(config, PatternLayout.KEY, LogEventPatternConverter.class, filterClass);<a name="line.235"></a>
<span class="sourceLineNo">236</span>        }<a name="line.236"></a>
<span class="sourceLineNo">237</span>        PatternParser parser = config.getComponent(COMPONENT_KEY);<a name="line.237"></a>
<span class="sourceLineNo">238</span>        if (parser == null) {<a name="line.238"></a>
<span class="sourceLineNo">239</span>            parser = new PatternParser(config, PatternLayout.KEY, ThrowablePatternConverter.class);<a name="line.239"></a>
<span class="sourceLineNo">240</span>            config.addComponent(COMPONENT_KEY, parser);<a name="line.240"></a>
<span class="sourceLineNo">241</span>            parser = config.getComponent(COMPONENT_KEY);<a name="line.241"></a>
<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
<span class="sourceLineNo">243</span>        return parser;<a name="line.243"></a>
<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
<span class="sourceLineNo">245</span><a name="line.245"></a>
<span class="sourceLineNo">246</span>    /**<a name="line.246"></a>
<span class="sourceLineNo">247</span>     * Gets this Rfc5424Layout's content format. Specified by:<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * &lt;ul&gt;<a name="line.248"></a>
<span class="sourceLineNo">249</span>     * &lt;li&gt;Key: "structured" Value: "true"&lt;/li&gt;<a name="line.249"></a>
<span class="sourceLineNo">250</span>     * &lt;li&gt;Key: "format" Value: "RFC5424"&lt;/li&gt;<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * &lt;/ul&gt;<a name="line.251"></a>
<span class="sourceLineNo">252</span>     *<a name="line.252"></a>
<span class="sourceLineNo">253</span>     * @return Map of content format keys supporting Rfc5424Layout<a name="line.253"></a>
<span class="sourceLineNo">254</span>     */<a name="line.254"></a>
<span class="sourceLineNo">255</span>    @Override<a name="line.255"></a>
<span class="sourceLineNo">256</span>    public Map&lt;String, String&gt; getContentFormat() {<a name="line.256"></a>
<span class="sourceLineNo">257</span>        final Map&lt;String, String&gt; result = new HashMap&lt;&gt;();<a name="line.257"></a>
<span class="sourceLineNo">258</span>        result.put("structured", "true");<a name="line.258"></a>
<span class="sourceLineNo">259</span>        result.put("formatType", "RFC5424");<a name="line.259"></a>
<span class="sourceLineNo">260</span>        return result;<a name="line.260"></a>
<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * Formats a {@link org.apache.logging.log4j.core.LogEvent} in conformance with the RFC 5424 Syslog specification.<a name="line.264"></a>
<span class="sourceLineNo">265</span>     *<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * @param event The LogEvent.<a name="line.266"></a>
<span class="sourceLineNo">267</span>     * @return The RFC 5424 String representation of the LogEvent.<a name="line.267"></a>
<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
<span class="sourceLineNo">270</span>    public String toSerializable(final LogEvent event) {<a name="line.270"></a>
<span class="sourceLineNo">271</span>        final StringBuilder buf = getStringBuilder();<a name="line.271"></a>
<span class="sourceLineNo">272</span>        appendPriority(buf, event.getLevel());<a name="line.272"></a>
<span class="sourceLineNo">273</span>        appendTimestamp(buf, event.getTimeMillis());<a name="line.273"></a>
<span class="sourceLineNo">274</span>        appendSpace(buf);<a name="line.274"></a>
<span class="sourceLineNo">275</span>        appendHostName(buf);<a name="line.275"></a>
<span class="sourceLineNo">276</span>        appendSpace(buf);<a name="line.276"></a>
<span class="sourceLineNo">277</span>        appendAppName(buf);<a name="line.277"></a>
<span class="sourceLineNo">278</span>        appendSpace(buf);<a name="line.278"></a>
<span class="sourceLineNo">279</span>        appendProcessId(buf);<a name="line.279"></a>
<span class="sourceLineNo">280</span>        appendSpace(buf);<a name="line.280"></a>
<span class="sourceLineNo">281</span>        appendMessageId(buf, event.getMessage());<a name="line.281"></a>
<span class="sourceLineNo">282</span>        appendSpace(buf);<a name="line.282"></a>
<span class="sourceLineNo">283</span>        appendStructuredElements(buf, event);<a name="line.283"></a>
<span class="sourceLineNo">284</span>        appendMessage(buf, event);<a name="line.284"></a>
<span class="sourceLineNo">285</span>        if (useTlsMessageFormat) {<a name="line.285"></a>
<span class="sourceLineNo">286</span>            return new TlsSyslogFrame(buf.toString()).toString();<a name="line.286"></a>
<span class="sourceLineNo">287</span>        }<a name="line.287"></a>
<span class="sourceLineNo">288</span>        return buf.toString();<a name="line.288"></a>
<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>    private void appendPriority(final StringBuilder buffer, final Level logLevel) {<a name="line.291"></a>
<span class="sourceLineNo">292</span>        buffer.append('&lt;');<a name="line.292"></a>
<span class="sourceLineNo">293</span>        buffer.append(Priority.getPriority(facility, logLevel));<a name="line.293"></a>
<span class="sourceLineNo">294</span>        buffer.append("&gt;1 ");<a name="line.294"></a>
<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>    private void appendTimestamp(final StringBuilder buffer, final long milliseconds) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>        buffer.append(computeTimeStampString(milliseconds));<a name="line.298"></a>
<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>    private void appendSpace(final StringBuilder buffer) {<a name="line.301"></a>
<span class="sourceLineNo">302</span>        buffer.append(' ');<a name="line.302"></a>
<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
<span class="sourceLineNo">304</span><a name="line.304"></a>
<span class="sourceLineNo">305</span>    private void appendHostName(final StringBuilder buffer) {<a name="line.305"></a>
<span class="sourceLineNo">306</span>        buffer.append(localHostName);<a name="line.306"></a>
<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>    private void appendAppName(final StringBuilder buffer) {<a name="line.309"></a>
<span class="sourceLineNo">310</span>        if (appName != null) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>            buffer.append(appName);<a name="line.311"></a>
<span class="sourceLineNo">312</span>        } else if (configName != null) {<a name="line.312"></a>
<span class="sourceLineNo">313</span>            buffer.append(configName);<a name="line.313"></a>
<span class="sourceLineNo">314</span>        } else {<a name="line.314"></a>
<span class="sourceLineNo">315</span>            buffer.append('-');<a name="line.315"></a>
<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>    private void appendProcessId(final StringBuilder buffer) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>        buffer.append(getProcId());<a name="line.320"></a>
<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>    private void appendMessageId(final StringBuilder buffer, final Message message) {<a name="line.323"></a>
<span class="sourceLineNo">324</span>        final boolean isStructured = message instanceof StructuredDataMessage;<a name="line.324"></a>
<span class="sourceLineNo">325</span>        final String type = isStructured ? ((StructuredDataMessage) message).getType() : null;<a name="line.325"></a>
<span class="sourceLineNo">326</span>        if (type != null) {<a name="line.326"></a>
<span class="sourceLineNo">327</span>            buffer.append(type);<a name="line.327"></a>
<span class="sourceLineNo">328</span>        } else if (messageId != null) {<a name="line.328"></a>
<span class="sourceLineNo">329</span>            buffer.append(messageId);<a name="line.329"></a>
<span class="sourceLineNo">330</span>        } else {<a name="line.330"></a>
<span class="sourceLineNo">331</span>            buffer.append('-');<a name="line.331"></a>
<span class="sourceLineNo">332</span>        }<a name="line.332"></a>
<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>    private void appendMessage(final StringBuilder buffer, final LogEvent event) {<a name="line.335"></a>
<span class="sourceLineNo">336</span>        final Message message = event.getMessage();<a name="line.336"></a>
<span class="sourceLineNo">337</span>        // This layout formats StructuredDataMessages instead of delegating to the Message itself.<a name="line.337"></a>
<span class="sourceLineNo">338</span>        final String text = (message instanceof StructuredDataMessage || message instanceof MessageCollectionMessage)<a name="line.338"></a>
<span class="sourceLineNo">339</span>                ? message.getFormat() : message.getFormattedMessage();<a name="line.339"></a>
<span class="sourceLineNo">340</span><a name="line.340"></a>
<span class="sourceLineNo">341</span>        if (text != null &amp;&amp; text.length() &gt; 0) {<a name="line.341"></a>
<span class="sourceLineNo">342</span>            buffer.append(' ').append(escapeNewlines(text, escapeNewLine));<a name="line.342"></a>
<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
<span class="sourceLineNo">344</span><a name="line.344"></a>
<span class="sourceLineNo">345</span>        if (exceptionFormatters != null &amp;&amp; event.getThrown() != null) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>            final StringBuilder exception = new StringBuilder(LF);<a name="line.346"></a>
<span class="sourceLineNo">347</span>            for (final PatternFormatter formatter : exceptionFormatters) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>                formatter.format(event, exception);<a name="line.348"></a>
<span class="sourceLineNo">349</span>            }<a name="line.349"></a>
<span class="sourceLineNo">350</span>            buffer.append(escapeNewlines(exception.toString(), escapeNewLine));<a name="line.350"></a>
<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
<span class="sourceLineNo">352</span>        if (includeNewLine) {<a name="line.352"></a>
<span class="sourceLineNo">353</span>            buffer.append(LF);<a name="line.353"></a>
<span class="sourceLineNo">354</span>        }<a name="line.354"></a>
<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
<span class="sourceLineNo">357</span>    private void appendStructuredElements(final StringBuilder buffer, final LogEvent event) {<a name="line.357"></a>
<span class="sourceLineNo">358</span>        final Message message = event.getMessage();<a name="line.358"></a>
<span class="sourceLineNo">359</span>        final boolean isStructured = message instanceof StructuredDataMessage ||<a name="line.359"></a>
<span class="sourceLineNo">360</span>                message instanceof StructuredDataCollectionMessage;<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>        if (!isStructured &amp;&amp; (fieldFormatters != null &amp;&amp; fieldFormatters.isEmpty()) &amp;&amp; !includeMdc) {<a name="line.362"></a>
<span class="sourceLineNo">363</span>            buffer.append('-');<a name="line.363"></a>
<span class="sourceLineNo">364</span>            return;<a name="line.364"></a>
<span class="sourceLineNo">365</span>        }<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>        final Map&lt;String, StructuredDataElement&gt; sdElements = new HashMap&lt;&gt;();<a name="line.367"></a>
<span class="sourceLineNo">368</span>        final Map&lt;String, String&gt; contextMap = event.getContextData().toMap();<a name="line.368"></a>
<span class="sourceLineNo">369</span><a name="line.369"></a>
<span class="sourceLineNo">370</span>        if (mdcRequired != null) {<a name="line.370"></a>
<span class="sourceLineNo">371</span>            checkRequired(contextMap);<a name="line.371"></a>
<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
<span class="sourceLineNo">373</span><a name="line.373"></a>
<span class="sourceLineNo">374</span>        if (fieldFormatters != null) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>            for (final Map.Entry&lt;String, FieldFormatter&gt; sdElement : fieldFormatters.entrySet()) {<a name="line.375"></a>
<span class="sourceLineNo">376</span>                final String sdId = sdElement.getKey();<a name="line.376"></a>
<span class="sourceLineNo">377</span>                final StructuredDataElement elem = sdElement.getValue().format(event);<a name="line.377"></a>
<span class="sourceLineNo">378</span>                sdElements.put(sdId, elem);<a name="line.378"></a>
<span class="sourceLineNo">379</span>            }<a name="line.379"></a>
<span class="sourceLineNo">380</span>        }<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>        if (includeMdc &amp;&amp; contextMap.size() &gt; 0) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>            final String mdcSdIdStr = mdcSdId.toString();<a name="line.383"></a>
<span class="sourceLineNo">384</span>            final StructuredDataElement union = sdElements.get(mdcSdIdStr);<a name="line.384"></a>
<span class="sourceLineNo">385</span>            if (union != null) {<a name="line.385"></a>
<span class="sourceLineNo">386</span>                union.union(contextMap);<a name="line.386"></a>
<span class="sourceLineNo">387</span>                sdElements.put(mdcSdIdStr, union);<a name="line.387"></a>
<span class="sourceLineNo">388</span>            } else {<a name="line.388"></a>
<span class="sourceLineNo">389</span>                final StructuredDataElement formattedContextMap = new StructuredDataElement(contextMap, mdcPrefix, false);<a name="line.389"></a>
<span class="sourceLineNo">390</span>                sdElements.put(mdcSdIdStr, formattedContextMap);<a name="line.390"></a>
<span class="sourceLineNo">391</span>            }<a name="line.391"></a>
<span class="sourceLineNo">392</span>        }<a name="line.392"></a>
<span class="sourceLineNo">393</span><a name="line.393"></a>
<span class="sourceLineNo">394</span>        if (isStructured) {<a name="line.394"></a>
<span class="sourceLineNo">395</span>            if (message instanceof MessageCollectionMessage) {<a name="line.395"></a>
<span class="sourceLineNo">396</span>                for (final StructuredDataMessage data : ((StructuredDataCollectionMessage)message)) {<a name="line.396"></a>
<span class="sourceLineNo">397</span>                    addStructuredData(sdElements, data);<a name="line.397"></a>
<span class="sourceLineNo">398</span>                }<a name="line.398"></a>
<span class="sourceLineNo">399</span>            } else {<a name="line.399"></a>
<span class="sourceLineNo">400</span>                addStructuredData(sdElements, (StructuredDataMessage) message);<a name="line.400"></a>
<span class="sourceLineNo">401</span>            }<a name="line.401"></a>
<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>        if (sdElements.isEmpty()) {<a name="line.404"></a>
<span class="sourceLineNo">405</span>            buffer.append('-');<a name="line.405"></a>
<span class="sourceLineNo">406</span>            return;<a name="line.406"></a>
<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>        for (final Map.Entry&lt;String, StructuredDataElement&gt; entry : sdElements.entrySet()) {<a name="line.409"></a>
<span class="sourceLineNo">410</span>            formatStructuredElement(entry.getKey(), entry.getValue(), buffer, listChecker);<a name="line.410"></a>
<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>    private void addStructuredData(final Map&lt;String, StructuredDataElement&gt; sdElements, final StructuredDataMessage data) {<a name="line.414"></a>
<span class="sourceLineNo">415</span>        final Map&lt;String, String&gt; map = data.getData();<a name="line.415"></a>
<span class="sourceLineNo">416</span>        final StructuredDataId id = data.getId();<a name="line.416"></a>
<span class="sourceLineNo">417</span>        final String sdId = getId(id);<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>        if (sdElements.containsKey(sdId)) {<a name="line.419"></a>
<span class="sourceLineNo">420</span>            final StructuredDataElement union = sdElements.get(id.toString());<a name="line.420"></a>
<span class="sourceLineNo">421</span>            union.union(map);<a name="line.421"></a>
<span class="sourceLineNo">422</span>            sdElements.put(sdId, union);<a name="line.422"></a>
<span class="sourceLineNo">423</span>        } else {<a name="line.423"></a>
<span class="sourceLineNo">424</span>            final StructuredDataElement formattedData = new StructuredDataElement(map, eventPrefix, false);<a name="line.424"></a>
<span class="sourceLineNo">425</span>            sdElements.put(sdId, formattedData);<a name="line.425"></a>
<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
<span class="sourceLineNo">428</span><a name="line.428"></a>
<span class="sourceLineNo">429</span>    private String escapeNewlines(final String text, final String replacement) {<a name="line.429"></a>
<span class="sourceLineNo">430</span>        if (null == replacement) {<a name="line.430"></a>
<span class="sourceLineNo">431</span>            return text;<a name="line.431"></a>
<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
<span class="sourceLineNo">433</span>        return NEWLINE_PATTERN.matcher(text).replaceAll(replacement);<a name="line.433"></a>
<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>    protected String getProcId() {<a name="line.436"></a>
<span class="sourceLineNo">437</span>        return procId;<a name="line.437"></a>
<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>    protected List&lt;String&gt; getMdcExcludes() {<a name="line.440"></a>
<span class="sourceLineNo">441</span>        return mdcExcludes;<a name="line.441"></a>
<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>    protected List&lt;String&gt; getMdcIncludes() {<a name="line.444"></a>
<span class="sourceLineNo">445</span>        return mdcIncludes;<a name="line.445"></a>
<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>    private String computeTimeStampString(final long now) {<a name="line.448"></a>
<span class="sourceLineNo">449</span>        long last;<a name="line.449"></a>
<span class="sourceLineNo">450</span>        synchronized (this) {<a name="line.450"></a>
<span class="sourceLineNo">451</span>            last = lastTimestamp;<a name="line.451"></a>
<span class="sourceLineNo">452</span>            if (now == lastTimestamp) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>                return timestamppStr;<a name="line.453"></a>
<span class="sourceLineNo">454</span>            }<a name="line.454"></a>
<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>        final StringBuilder buffer = new StringBuilder();<a name="line.457"></a>
<span class="sourceLineNo">458</span>        final Calendar cal = new GregorianCalendar();<a name="line.458"></a>
<span class="sourceLineNo">459</span>        cal.setTimeInMillis(now);<a name="line.459"></a>
<span class="sourceLineNo">460</span>        buffer.append(Integer.toString(cal.get(Calendar.YEAR)));<a name="line.460"></a>
<span class="sourceLineNo">461</span>        buffer.append('-');<a name="line.461"></a>
<span class="sourceLineNo">462</span>        pad(cal.get(Calendar.MONTH) + 1, TWO_DIGITS, buffer);<a name="line.462"></a>
<span class="sourceLineNo">463</span>        buffer.append('-');<a name="line.463"></a>
<span class="sourceLineNo">464</span>        pad(cal.get(Calendar.DAY_OF_MONTH), TWO_DIGITS, buffer);<a name="line.464"></a>
<span class="sourceLineNo">465</span>        buffer.append('T');<a name="line.465"></a>
<span class="sourceLineNo">466</span>        pad(cal.get(Calendar.HOUR_OF_DAY), TWO_DIGITS, buffer);<a name="line.466"></a>
<span class="sourceLineNo">467</span>        buffer.append(':');<a name="line.467"></a>
<span class="sourceLineNo">468</span>        pad(cal.get(Calendar.MINUTE), TWO_DIGITS, buffer);<a name="line.468"></a>
<span class="sourceLineNo">469</span>        buffer.append(':');<a name="line.469"></a>
<span class="sourceLineNo">470</span>        pad(cal.get(Calendar.SECOND), TWO_DIGITS, buffer);<a name="line.470"></a>
<span class="sourceLineNo">471</span>        buffer.append('.');<a name="line.471"></a>
<span class="sourceLineNo">472</span>        pad(cal.get(Calendar.MILLISECOND), THREE_DIGITS, buffer);<a name="line.472"></a>
<span class="sourceLineNo">473</span><a name="line.473"></a>
<span class="sourceLineNo">474</span>        int tzmin = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / MILLIS_PER_MINUTE;<a name="line.474"></a>
<span class="sourceLineNo">475</span>        if (tzmin == 0) {<a name="line.475"></a>
<span class="sourceLineNo">476</span>            buffer.append('Z');<a name="line.476"></a>
<span class="sourceLineNo">477</span>        } else {<a name="line.477"></a>
<span class="sourceLineNo">478</span>            if (tzmin &lt; 0) {<a name="line.478"></a>
<span class="sourceLineNo">479</span>                tzmin = -tzmin;<a name="line.479"></a>
<span class="sourceLineNo">480</span>                buffer.append('-');<a name="line.480"></a>
<span class="sourceLineNo">481</span>            } else {<a name="line.481"></a>
<span class="sourceLineNo">482</span>                buffer.append('+');<a name="line.482"></a>
<span class="sourceLineNo">483</span>            }<a name="line.483"></a>
<span class="sourceLineNo">484</span>            final int tzhour = tzmin / MINUTES_PER_HOUR;<a name="line.484"></a>
<span class="sourceLineNo">485</span>            tzmin -= tzhour * MINUTES_PER_HOUR;<a name="line.485"></a>
<span class="sourceLineNo">486</span>            pad(tzhour, TWO_DIGITS, buffer);<a name="line.486"></a>
<span class="sourceLineNo">487</span>            buffer.append(':');<a name="line.487"></a>
<span class="sourceLineNo">488</span>            pad(tzmin, TWO_DIGITS, buffer);<a name="line.488"></a>
<span class="sourceLineNo">489</span>        }<a name="line.489"></a>
<span class="sourceLineNo">490</span>        synchronized (this) {<a name="line.490"></a>
<span class="sourceLineNo">491</span>            if (last == lastTimestamp) {<a name="line.491"></a>
<span class="sourceLineNo">492</span>                lastTimestamp = now;<a name="line.492"></a>
<span class="sourceLineNo">493</span>                timestamppStr = buffer.toString();<a name="line.493"></a>
<span class="sourceLineNo">494</span>            }<a name="line.494"></a>
<span class="sourceLineNo">495</span>        }<a name="line.495"></a>
<span class="sourceLineNo">496</span>        return buffer.toString();<a name="line.496"></a>
<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
<span class="sourceLineNo">498</span><a name="line.498"></a>
<span class="sourceLineNo">499</span>    private void pad(final int val, int max, final StringBuilder buf) {<a name="line.499"></a>
<span class="sourceLineNo">500</span>        while (max &gt; 1) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>            if (val &lt; max) {<a name="line.501"></a>
<span class="sourceLineNo">502</span>                buf.append('0');<a name="line.502"></a>
<span class="sourceLineNo">503</span>            }<a name="line.503"></a>
<span class="sourceLineNo">504</span>            max = max / TWO_DIGITS;<a name="line.504"></a>
<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
<span class="sourceLineNo">506</span>        buf.append(Integer.toString(val));<a name="line.506"></a>
<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>    private void formatStructuredElement(final String id, final StructuredDataElement data,<a name="line.509"></a>
<span class="sourceLineNo">510</span>            final StringBuilder sb, final ListChecker checker) {<a name="line.510"></a>
<span class="sourceLineNo">511</span>        if ((id == null &amp;&amp; defaultId == null) || data.discard()) {<a name="line.511"></a>
<span class="sourceLineNo">512</span>            return;<a name="line.512"></a>
<span class="sourceLineNo">513</span>        }<a name="line.513"></a>
<span class="sourceLineNo">514</span><a name="line.514"></a>
<span class="sourceLineNo">515</span>        sb.append('[');<a name="line.515"></a>
<span class="sourceLineNo">516</span>        sb.append(id);<a name="line.516"></a>
<span class="sourceLineNo">517</span>        if (!mdcSdId.toString().equals(id)) {<a name="line.517"></a>
<span class="sourceLineNo">518</span>            appendMap(data.getPrefix(), data.getFields(), sb, ListChecker.NOOP_CHECKER);<a name="line.518"></a>
<span class="sourceLineNo">519</span>        } else {<a name="line.519"></a>
<span class="sourceLineNo">520</span>            appendMap(data.getPrefix(), data.getFields(), sb, checker);<a name="line.520"></a>
<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
<span class="sourceLineNo">522</span>        sb.append(']');<a name="line.522"></a>
<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
<span class="sourceLineNo">524</span><a name="line.524"></a>
<span class="sourceLineNo">525</span>    private String getId(final StructuredDataId id) {<a name="line.525"></a>
<span class="sourceLineNo">526</span>        final StringBuilder sb = new StringBuilder();<a name="line.526"></a>
<span class="sourceLineNo">527</span>        if (id == null || id.getName() == null) {<a name="line.527"></a>
<span class="sourceLineNo">528</span>            sb.append(defaultId);<a name="line.528"></a>
<span class="sourceLineNo">529</span>        } else {<a name="line.529"></a>
<span class="sourceLineNo">530</span>            sb.append(id.getName());<a name="line.530"></a>
<span class="sourceLineNo">531</span>        }<a name="line.531"></a>
<span class="sourceLineNo">532</span>        int ein = id != null ? id.getEnterpriseNumber() : enterpriseNumber;<a name="line.532"></a>
<span class="sourceLineNo">533</span>        if (ein &lt; 0) {<a name="line.533"></a>
<span class="sourceLineNo">534</span>            ein = enterpriseNumber;<a name="line.534"></a>
<span class="sourceLineNo">535</span>        }<a name="line.535"></a>
<span class="sourceLineNo">536</span>        if (ein &gt;= 0) {<a name="line.536"></a>
<span class="sourceLineNo">537</span>            sb.append('@').append(ein);<a name="line.537"></a>
<span class="sourceLineNo">538</span>        }<a name="line.538"></a>
<span class="sourceLineNo">539</span>        return sb.toString();<a name="line.539"></a>
<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>    private void checkRequired(final Map&lt;String, String&gt; map) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>        for (final String key : mdcRequired) {<a name="line.543"></a>
<span class="sourceLineNo">544</span>            final String value = map.get(key);<a name="line.544"></a>
<span class="sourceLineNo">545</span>            if (value == null) {<a name="line.545"></a>
<span class="sourceLineNo">546</span>                throw new LoggingException("Required key " + key + " is missing from the " + mdcId);<a name="line.546"></a>
<span class="sourceLineNo">547</span>            }<a name="line.547"></a>
<span class="sourceLineNo">548</span>        }<a name="line.548"></a>
<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
<span class="sourceLineNo">550</span><a name="line.550"></a>
<span class="sourceLineNo">551</span>    private void appendMap(final String prefix, final Map&lt;String, String&gt; map, final StringBuilder sb,<a name="line.551"></a>
<span class="sourceLineNo">552</span>            final ListChecker checker) {<a name="line.552"></a>
<span class="sourceLineNo">553</span>        final SortedMap&lt;String, String&gt; sorted = new TreeMap&lt;&gt;(map);<a name="line.553"></a>
<span class="sourceLineNo">554</span>        for (final Map.Entry&lt;String, String&gt; entry : sorted.entrySet()) {<a name="line.554"></a>
<span class="sourceLineNo">555</span>            if (checker.check(entry.getKey()) &amp;&amp; entry.getValue() != null) {<a name="line.555"></a>
<span class="sourceLineNo">556</span>                sb.append(' ');<a name="line.556"></a>
<span class="sourceLineNo">557</span>                if (prefix != null) {<a name="line.557"></a>
<span class="sourceLineNo">558</span>                    sb.append(prefix);<a name="line.558"></a>
<span class="sourceLineNo">559</span>                }<a name="line.559"></a>
<span class="sourceLineNo">560</span>                final String safeKey = escapeNewlines(escapeSDParams(entry.getKey()), escapeNewLine);<a name="line.560"></a>
<span class="sourceLineNo">561</span>                final String safeValue = escapeNewlines(escapeSDParams(entry.getValue()), escapeNewLine);<a name="line.561"></a>
<span class="sourceLineNo">562</span>                StringBuilders.appendKeyDqValue(sb, safeKey, safeValue);<a name="line.562"></a>
<span class="sourceLineNo">563</span>            }<a name="line.563"></a>
<span class="sourceLineNo">564</span>        }<a name="line.564"></a>
<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>    private String escapeSDParams(final String value) {<a name="line.567"></a>
<span class="sourceLineNo">568</span>        return PARAM_VALUE_ESCAPE_PATTERN.matcher(value).replaceAll("\\\\$0");<a name="line.568"></a>
<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>    @Override<a name="line.571"></a>
<span class="sourceLineNo">572</span>    public String toString() {<a name="line.572"></a>
<span class="sourceLineNo">573</span>        final StringBuilder sb = new StringBuilder();<a name="line.573"></a>
<span class="sourceLineNo">574</span>        sb.append("facility=").append(facility.name());<a name="line.574"></a>
<span class="sourceLineNo">575</span>        sb.append(" appName=").append(appName);<a name="line.575"></a>
<span class="sourceLineNo">576</span>        sb.append(" defaultId=").append(defaultId);<a name="line.576"></a>
<span class="sourceLineNo">577</span>        sb.append(" enterpriseNumber=").append(enterpriseNumber);<a name="line.577"></a>
<span class="sourceLineNo">578</span>        sb.append(" newLine=").append(includeNewLine);<a name="line.578"></a>
<span class="sourceLineNo">579</span>        sb.append(" includeMDC=").append(includeMdc);<a name="line.579"></a>
<span class="sourceLineNo">580</span>        sb.append(" messageId=").append(messageId);<a name="line.580"></a>
<span class="sourceLineNo">581</span>        return sb.toString();<a name="line.581"></a>
<span class="sourceLineNo">582</span>    }<a name="line.582"></a>
<span class="sourceLineNo">583</span><a name="line.583"></a>
<span class="sourceLineNo">584</span>    /**<a name="line.584"></a>
<span class="sourceLineNo">585</span>     * Create the RFC 5424 Layout.<a name="line.585"></a>
<span class="sourceLineNo">586</span>     *<a name="line.586"></a>
<span class="sourceLineNo">587</span>     * @param facility The Facility is used to try to classify the message.<a name="line.587"></a>
<span class="sourceLineNo">588</span>     * @param id The default structured data id to use when formatting according to RFC 5424.<a name="line.588"></a>
<span class="sourceLineNo">589</span>     * @param enterpriseNumber The IANA enterprise number.<a name="line.589"></a>
<span class="sourceLineNo">590</span>     * @param includeMDC Indicates whether data from the ThreadContextMap will be included in the RFC 5424 Syslog<a name="line.590"></a>
<span class="sourceLineNo">591</span>     *            record. Defaults to "true:.<a name="line.591"></a>
<span class="sourceLineNo">592</span>     * @param mdcId The id to use for the MDC Structured Data Element.<a name="line.592"></a>
<span class="sourceLineNo">593</span>     * @param mdcPrefix The prefix to add to MDC key names.<a name="line.593"></a>
<span class="sourceLineNo">594</span>     * @param eventPrefix The prefix to add to event key names.<a name="line.594"></a>
<span class="sourceLineNo">595</span>     * @param newLine If true, a newline will be appended to the end of the syslog record. The default is false.<a name="line.595"></a>
<span class="sourceLineNo">596</span>     * @param escapeNL String that should be used to replace newlines within the message text.<a name="line.596"></a>
<span class="sourceLineNo">597</span>     * @param appName The value to use as the APP-NAME in the RFC 5424 syslog record.<a name="line.597"></a>
<span class="sourceLineNo">598</span>     * @param msgId The default value to be used in the MSGID field of RFC 5424 syslog records.<a name="line.598"></a>
<span class="sourceLineNo">599</span>     * @param excludes A comma separated list of MDC keys that should be excluded from the LogEvent.<a name="line.599"></a>
<span class="sourceLineNo">600</span>     * @param includes A comma separated list of MDC keys that should be included in the FlumeEvent.<a name="line.600"></a>
<span class="sourceLineNo">601</span>     * @param required A comma separated list of MDC keys that must be present in the MDC.<a name="line.601"></a>
<span class="sourceLineNo">602</span>     * @param exceptionPattern The pattern for formatting exceptions.<a name="line.602"></a>
<span class="sourceLineNo">603</span>     * @param useTlsMessageFormat If true the message will be formatted according to RFC 5425.<a name="line.603"></a>
<span class="sourceLineNo">604</span>     * @param loggerFields Container for the KeyValuePairs containing the patterns<a name="line.604"></a>
<span class="sourceLineNo">605</span>     * @param config The Configuration. Some Converters require access to the Interpolator.<a name="line.605"></a>
<span class="sourceLineNo">606</span>     * @return An Rfc5424Layout.<a name="line.606"></a>
<span class="sourceLineNo">607</span>     */<a name="line.607"></a>
<span class="sourceLineNo">608</span>    @PluginFactory<a name="line.608"></a>
<span class="sourceLineNo">609</span>    public static Rfc5424Layout createLayout(<a name="line.609"></a>
<span class="sourceLineNo">610</span>            // @formatter:off<a name="line.610"></a>
<span class="sourceLineNo">611</span>            @PluginAttribute(value = "facility", defaultString = "LOCAL0") final Facility facility,<a name="line.611"></a>
<span class="sourceLineNo">612</span>            @PluginAttribute("id") final String id,<a name="line.612"></a>
<span class="sourceLineNo">613</span>            @PluginAttribute(value = "enterpriseNumber", defaultInt = DEFAULT_ENTERPRISE_NUMBER)<a name="line.613"></a>
<span class="sourceLineNo">614</span>            final int enterpriseNumber,<a name="line.614"></a>
<span class="sourceLineNo">615</span>            @PluginAttribute(value = "includeMDC", defaultBoolean = true) final boolean includeMDC,<a name="line.615"></a>
<span class="sourceLineNo">616</span>            @PluginAttribute(value = "mdcId", defaultString = DEFAULT_MDCID) final String mdcId,<a name="line.616"></a>
<span class="sourceLineNo">617</span>            @PluginAttribute("mdcPrefix") final String mdcPrefix,<a name="line.617"></a>
<span class="sourceLineNo">618</span>            @PluginAttribute("eventPrefix") final String eventPrefix,<a name="line.618"></a>
<span class="sourceLineNo">619</span>            @PluginAttribute(value = "newLine") final boolean newLine,<a name="line.619"></a>
<span class="sourceLineNo">620</span>            @PluginAttribute("newLineEscape") final String escapeNL,<a name="line.620"></a>
<span class="sourceLineNo">621</span>            @PluginAttribute("appName") final String appName,<a name="line.621"></a>
<span class="sourceLineNo">622</span>            @PluginAttribute("messageId") final String msgId,<a name="line.622"></a>
<span class="sourceLineNo">623</span>            @PluginAttribute("mdcExcludes") final String excludes,<a name="line.623"></a>
<span class="sourceLineNo">624</span>            @PluginAttribute("mdcIncludes") String includes,<a name="line.624"></a>
<span class="sourceLineNo">625</span>            @PluginAttribute("mdcRequired") final String required,<a name="line.625"></a>
<span class="sourceLineNo">626</span>            @PluginAttribute("exceptionPattern") final String exceptionPattern,<a name="line.626"></a>
<span class="sourceLineNo">627</span>            // RFC 5425<a name="line.627"></a>
<span class="sourceLineNo">628</span>            @PluginAttribute(value = "useTlsMessageFormat") final boolean useTlsMessageFormat,<a name="line.628"></a>
<span class="sourceLineNo">629</span>            @PluginElement("LoggerFields") final LoggerFields[] loggerFields,<a name="line.629"></a>
<span class="sourceLineNo">630</span>            @PluginConfiguration final Configuration config) {<a name="line.630"></a>
<span class="sourceLineNo">631</span>        // @formatter:on<a name="line.631"></a>
<span class="sourceLineNo">632</span>        if (includes != null &amp;&amp; excludes != null) {<a name="line.632"></a>
<span class="sourceLineNo">633</span>            LOGGER.error("mdcIncludes and mdcExcludes are mutually exclusive. Includes wil be ignored");<a name="line.633"></a>
<span class="sourceLineNo">634</span>            includes = null;<a name="line.634"></a>
<span class="sourceLineNo">635</span>        }<a name="line.635"></a>
<span class="sourceLineNo">636</span><a name="line.636"></a>
<span class="sourceLineNo">637</span>        return new Rfc5424Layout(config, facility, id, enterpriseNumber, includeMDC, newLine, escapeNL, mdcId,<a name="line.637"></a>
<span class="sourceLineNo">638</span>                mdcPrefix, eventPrefix, appName, msgId, excludes, includes, required, StandardCharsets.UTF_8,<a name="line.638"></a>
<span class="sourceLineNo">639</span>                exceptionPattern, useTlsMessageFormat, loggerFields);<a name="line.639"></a>
<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
<span class="sourceLineNo">641</span><a name="line.641"></a>
<span class="sourceLineNo">642</span>    private class FieldFormatter {<a name="line.642"></a>
<span class="sourceLineNo">643</span><a name="line.643"></a>
<span class="sourceLineNo">644</span>        private final Map&lt;String, List&lt;PatternFormatter&gt;&gt; delegateMap;<a name="line.644"></a>
<span class="sourceLineNo">645</span>        private final boolean discardIfEmpty;<a name="line.645"></a>
<span class="sourceLineNo">646</span><a name="line.646"></a>
<span class="sourceLineNo">647</span>        public FieldFormatter(final Map&lt;String, List&lt;PatternFormatter&gt;&gt; fieldMap, final boolean discardIfEmpty) {<a name="line.647"></a>
<span class="sourceLineNo">648</span>            this.discardIfEmpty = discardIfEmpty;<a name="line.648"></a>
<span class="sourceLineNo">649</span>            this.delegateMap = fieldMap;<a name="line.649"></a>
<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
<span class="sourceLineNo">651</span><a name="line.651"></a>
<span class="sourceLineNo">652</span>        public StructuredDataElement format(final LogEvent event) {<a name="line.652"></a>
<span class="sourceLineNo">653</span>            final Map&lt;String, String&gt; map = new HashMap&lt;&gt;(delegateMap.size());<a name="line.653"></a>
<span class="sourceLineNo">654</span><a name="line.654"></a>
<span class="sourceLineNo">655</span>            for (final Map.Entry&lt;String, List&lt;PatternFormatter&gt;&gt; entry : delegateMap.entrySet()) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>                final StringBuilder buffer = new StringBuilder();<a name="line.656"></a>
<span class="sourceLineNo">657</span>                for (final PatternFormatter formatter : entry.getValue()) {<a name="line.657"></a>
<span class="sourceLineNo">658</span>                    formatter.format(event, buffer);<a name="line.658"></a>
<span class="sourceLineNo">659</span>                }<a name="line.659"></a>
<span class="sourceLineNo">660</span>                map.put(entry.getKey(), buffer.toString());<a name="line.660"></a>
<span class="sourceLineNo">661</span>            }<a name="line.661"></a>
<span class="sourceLineNo">662</span>            return new StructuredDataElement(map, eventPrefix, discardIfEmpty);<a name="line.662"></a>
<span class="sourceLineNo">663</span>        }<a name="line.663"></a>
<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
<span class="sourceLineNo">665</span><a name="line.665"></a>
<span class="sourceLineNo">666</span>    private class StructuredDataElement {<a name="line.666"></a>
<span class="sourceLineNo">667</span><a name="line.667"></a>
<span class="sourceLineNo">668</span>        private final Map&lt;String, String&gt; fields;<a name="line.668"></a>
<span class="sourceLineNo">669</span>        private final boolean discardIfEmpty;<a name="line.669"></a>
<span class="sourceLineNo">670</span>        private final String prefix;<a name="line.670"></a>
<span class="sourceLineNo">671</span><a name="line.671"></a>
<span class="sourceLineNo">672</span>        public StructuredDataElement(final Map&lt;String, String&gt; fields, final String prefix,<a name="line.672"></a>
<span class="sourceLineNo">673</span>                                     final boolean discardIfEmpty) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>            this.discardIfEmpty = discardIfEmpty;<a name="line.674"></a>
<span class="sourceLineNo">675</span>            this.fields = fields;<a name="line.675"></a>
<span class="sourceLineNo">676</span>            this.prefix = prefix;<a name="line.676"></a>
<span class="sourceLineNo">677</span>        }<a name="line.677"></a>
<span class="sourceLineNo">678</span><a name="line.678"></a>
<span class="sourceLineNo">679</span>        boolean discard() {<a name="line.679"></a>
<span class="sourceLineNo">680</span>            if (discardIfEmpty == false) {<a name="line.680"></a>
<span class="sourceLineNo">681</span>                return false;<a name="line.681"></a>
<span class="sourceLineNo">682</span>            }<a name="line.682"></a>
<span class="sourceLineNo">683</span>            boolean foundNotEmptyValue = false;<a name="line.683"></a>
<span class="sourceLineNo">684</span>            for (final Map.Entry&lt;String, String&gt; entry : fields.entrySet()) {<a name="line.684"></a>
<span class="sourceLineNo">685</span>                if (Strings.isNotEmpty(entry.getValue())) {<a name="line.685"></a>
<span class="sourceLineNo">686</span>                    foundNotEmptyValue = true;<a name="line.686"></a>
<span class="sourceLineNo">687</span>                    break;<a name="line.687"></a>
<span class="sourceLineNo">688</span>                }<a name="line.688"></a>
<span class="sourceLineNo">689</span>            }<a name="line.689"></a>
<span class="sourceLineNo">690</span>            return !foundNotEmptyValue;<a name="line.690"></a>
<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
<span class="sourceLineNo">692</span><a name="line.692"></a>
<span class="sourceLineNo">693</span>        void union(final Map&lt;String, String&gt; addFields) {<a name="line.693"></a>
<span class="sourceLineNo">694</span>            this.fields.putAll(addFields);<a name="line.694"></a>
<span class="sourceLineNo">695</span>        }<a name="line.695"></a>
<span class="sourceLineNo">696</span><a name="line.696"></a>
<span class="sourceLineNo">697</span>        Map&lt;String, String&gt; getFields() {<a name="line.697"></a>
<span class="sourceLineNo">698</span>            return this.fields;<a name="line.698"></a>
<span class="sourceLineNo">699</span>        }<a name="line.699"></a>
<span class="sourceLineNo">700</span><a name="line.700"></a>
<span class="sourceLineNo">701</span>        String getPrefix() {<a name="line.701"></a>
<span class="sourceLineNo">702</span>            return prefix;<a name="line.702"></a>
<span class="sourceLineNo">703</span>        }<a name="line.703"></a>
<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
<span class="sourceLineNo">705</span><a name="line.705"></a>
<span class="sourceLineNo">706</span>    public Facility getFacility() {<a name="line.706"></a>
<span class="sourceLineNo">707</span>        return facility;<a name="line.707"></a>
<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
<span class="sourceLineNo">709</span>}<a name="line.709"></a>




























































</pre>
</div>
</body>
</html>
