<!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.appender;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.io.IOException;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.Writer;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.concurrent.TimeUnit;<a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.logging.log4j.core.StringLayout;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
<span class="sourceLineNo">026</span> * Manages a Writer so that it can be shared by multiple Appenders and will<a name="line.26"></a>
<span class="sourceLineNo">027</span> * allow appenders to reconfigure without requiring a new writer.<a name="line.27"></a>
<span class="sourceLineNo">028</span> */<a name="line.28"></a>
<span class="sourceLineNo">029</span>public class WriterManager extends AbstractManager {<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>    /**<a name="line.31"></a>
<span class="sourceLineNo">032</span>     * Creates a Manager.<a name="line.32"></a>
<span class="sourceLineNo">033</span>     *<a name="line.33"></a>
<span class="sourceLineNo">034</span>     * @param name The name of the stream to manage.<a name="line.34"></a>
<span class="sourceLineNo">035</span>     * @param data The data to pass to the Manager.<a name="line.35"></a>
<span class="sourceLineNo">036</span>     * @param factory The factory to use to create the Manager.<a name="line.36"></a>
<span class="sourceLineNo">037</span>     * @param &lt;T&gt; The type of the WriterManager.<a name="line.37"></a>
<span class="sourceLineNo">038</span>     * @return A WriterManager.<a name="line.38"></a>
<span class="sourceLineNo">039</span>     */<a name="line.39"></a>
<span class="sourceLineNo">040</span>    public static &lt;T&gt; WriterManager getManager(final String name, final T data,<a name="line.40"></a>
<span class="sourceLineNo">041</span>                                                 final ManagerFactory&lt;? extends WriterManager, T&gt; factory) {<a name="line.41"></a>
<span class="sourceLineNo">042</span>        return AbstractManager.getManager(name, factory, data);<a name="line.42"></a>
<span class="sourceLineNo">043</span>    }<a name="line.43"></a>
<span class="sourceLineNo">044</span>    protected final StringLayout layout;<a name="line.44"></a>
<span class="sourceLineNo">045</span><a name="line.45"></a>
<span class="sourceLineNo">046</span>    private volatile Writer writer;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>    public WriterManager(final Writer writer, final String streamName, final StringLayout layout,<a name="line.48"></a>
<span class="sourceLineNo">049</span>            final boolean writeHeader) {<a name="line.49"></a>
<span class="sourceLineNo">050</span>        super(null, streamName);<a name="line.50"></a>
<span class="sourceLineNo">051</span>        this.writer = writer;<a name="line.51"></a>
<span class="sourceLineNo">052</span>        this.layout = layout;<a name="line.52"></a>
<span class="sourceLineNo">053</span>        if (writeHeader &amp;&amp; layout != null) {<a name="line.53"></a>
<span class="sourceLineNo">054</span>            final byte[] header = layout.getHeader();<a name="line.54"></a>
<span class="sourceLineNo">055</span>            if (header != null) {<a name="line.55"></a>
<span class="sourceLineNo">056</span>                try {<a name="line.56"></a>
<span class="sourceLineNo">057</span>                    this.writer.write(new String(header, layout.getCharset()));<a name="line.57"></a>
<span class="sourceLineNo">058</span>                } catch (final IOException e) {<a name="line.58"></a>
<span class="sourceLineNo">059</span>                    logError("Unable to write header", e);<a name="line.59"></a>
<span class="sourceLineNo">060</span>                }<a name="line.60"></a>
<span class="sourceLineNo">061</span>            }<a name="line.61"></a>
<span class="sourceLineNo">062</span>        }<a name="line.62"></a>
<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>    protected synchronized void closeWriter() {<a name="line.65"></a>
<span class="sourceLineNo">066</span>        final Writer w = writer; // access volatile field only once per method<a name="line.66"></a>
<span class="sourceLineNo">067</span>        try {<a name="line.67"></a>
<span class="sourceLineNo">068</span>            w.close();<a name="line.68"></a>
<span class="sourceLineNo">069</span>        } catch (final IOException ex) {<a name="line.69"></a>
<span class="sourceLineNo">070</span>            logError("Unable to close stream", ex);<a name="line.70"></a>
<span class="sourceLineNo">071</span>        }<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>    /**<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * Flushes any buffers.<a name="line.75"></a>
<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
<span class="sourceLineNo">077</span>    public synchronized void flush() {<a name="line.77"></a>
<span class="sourceLineNo">078</span>        try {<a name="line.78"></a>
<span class="sourceLineNo">079</span>            writer.flush();<a name="line.79"></a>
<span class="sourceLineNo">080</span>        } catch (final IOException ex) {<a name="line.80"></a>
<span class="sourceLineNo">081</span>            final String msg = "Error flushing stream " + getName();<a name="line.81"></a>
<span class="sourceLineNo">082</span>            throw new AppenderLoggingException(msg, ex);<a name="line.82"></a>
<span class="sourceLineNo">083</span>        }<a name="line.83"></a>
<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>    protected Writer getWriter() {<a name="line.86"></a>
<span class="sourceLineNo">087</span>        return writer;<a name="line.87"></a>
<span class="sourceLineNo">088</span>    }<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>     * Returns the status of the stream.<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * @return true if the stream is open, false if it is not.<a name="line.92"></a>
<span class="sourceLineNo">093</span>     */<a name="line.93"></a>
<span class="sourceLineNo">094</span>    public boolean isOpen() {<a name="line.94"></a>
<span class="sourceLineNo">095</span>        return getCount() &gt; 0;<a name="line.95"></a>
<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>    /**<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * Default hook to write footer during close.<a name="line.99"></a>
<span class="sourceLineNo">100</span>     */<a name="line.100"></a>
<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
<span class="sourceLineNo">102</span>    public boolean releaseSub(final long timeout, final TimeUnit timeUnit) {<a name="line.102"></a>
<span class="sourceLineNo">103</span>        writeFooter();<a name="line.103"></a>
<span class="sourceLineNo">104</span>        closeWriter();<a name="line.104"></a>
<span class="sourceLineNo">105</span>        return true;<a name="line.105"></a>
<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>    protected void setWriter(final Writer writer) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>        final byte[] header = layout.getHeader();<a name="line.109"></a>
<span class="sourceLineNo">110</span>        if (header != null) {<a name="line.110"></a>
<span class="sourceLineNo">111</span>            try {<a name="line.111"></a>
<span class="sourceLineNo">112</span>                writer.write(new String(header, layout.getCharset()));<a name="line.112"></a>
<span class="sourceLineNo">113</span>                this.writer = writer; // only update field if writer.write() succeeded<a name="line.113"></a>
<span class="sourceLineNo">114</span>            } catch (final IOException ioe) {<a name="line.114"></a>
<span class="sourceLineNo">115</span>                logError("Unable to write header", ioe);<a name="line.115"></a>
<span class="sourceLineNo">116</span>            }<a name="line.116"></a>
<span class="sourceLineNo">117</span>        } else {<a name="line.117"></a>
<span class="sourceLineNo">118</span>            this.writer = writer;<a name="line.118"></a>
<span class="sourceLineNo">119</span>        }<a name="line.119"></a>
<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>    /**<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * Some output streams synchronize writes while others do not. Synchronizing here insures that<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * log events won't be intertwined.<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * @param str the string to write<a name="line.125"></a>
<span class="sourceLineNo">126</span>     * @throws AppenderLoggingException if an error occurs.<a name="line.126"></a>
<span class="sourceLineNo">127</span>     */<a name="line.127"></a>
<span class="sourceLineNo">128</span>    protected synchronized void write(final String str)  {<a name="line.128"></a>
<span class="sourceLineNo">129</span>        try {<a name="line.129"></a>
<span class="sourceLineNo">130</span>            writer.write(str);<a name="line.130"></a>
<span class="sourceLineNo">131</span>        } catch (final IOException ex) {<a name="line.131"></a>
<span class="sourceLineNo">132</span>            final String msg = "Error writing to stream " + getName();<a name="line.132"></a>
<span class="sourceLineNo">133</span>            throw new AppenderLoggingException(msg, ex);<a name="line.133"></a>
<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span>    /**<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * Writes the footer.<a name="line.138"></a>
<span class="sourceLineNo">139</span>     */<a name="line.139"></a>
<span class="sourceLineNo">140</span>    protected void writeFooter() {<a name="line.140"></a>
<span class="sourceLineNo">141</span>        if (layout == null) {<a name="line.141"></a>
<span class="sourceLineNo">142</span>            return;<a name="line.142"></a>
<span class="sourceLineNo">143</span>        }<a name="line.143"></a>
<span class="sourceLineNo">144</span>        final byte[] footer = layout.getFooter();<a name="line.144"></a>
<span class="sourceLineNo">145</span>        if (footer != null &amp;&amp; footer.length &gt; 0) {<a name="line.145"></a>
<span class="sourceLineNo">146</span>            write(new String(footer, layout.getCharset()));<a name="line.146"></a>
<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
<span class="sourceLineNo">149</span>}<a name="line.149"></a>




























































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