01: /*
02: * Copyright (C) The Apache Software Foundation. All rights reserved.
03: *
04: * This software is published under the terms of the Apache Software License
05: * version 1.1, a copy of which has been included with this distribution in
06: * the LICENSE file.
07: */
08: package org.jivesoftware.util.log.output.io;
09:
10: import org.jivesoftware.util.log.format.Formatter;
11: import org.jivesoftware.util.log.output.AbstractOutputTarget;
12: import java.io.IOException;
13: import java.io.Writer;
14:
15: /**
16: * This target outputs to a writer.
17: *
18: * @author <a href="mailto:peter@apache.org">Peter Donald</a>
19: */
20: public class WriterTarget extends AbstractOutputTarget {
21:
22: private Writer m_output;
23:
24: /**
25: * Construct target with a specific writer and formatter.
26: *
27: * @param writer the writer
28: * @param formatter the formatter
29: */
30: public WriterTarget(final Writer writer, final Formatter formatter) {
31: super (formatter);
32:
33: if (null != writer) {
34: setWriter(writer);
35: open();
36: }
37: }
38:
39: /**
40: * Set the writer.
41: * Close down writer and send tail if appropriate.
42: *
43: * @param writer the new writer
44: */
45: protected synchronized void setWriter(final Writer writer) {
46: if (null == writer) {
47: throw new NullPointerException(
48: "writer property must not be null");
49: }
50:
51: m_output = writer;
52: }
53:
54: /**
55: * Concrete implementation of output that writes out to underlying writer.
56: *
57: * @param data the data to output
58: */
59: protected void write(final String data) {
60: try {
61: m_output.write(data);
62: m_output.flush();
63: } catch (final IOException ioe) {
64: getErrorHandler().error("Caught an IOException", ioe, null);
65: }
66: }
67:
68: /**
69: * Shutdown target.
70: * Attempting to send to target after close() will cause errors to be logged.
71: */
72: public synchronized void close() {
73: super .close();
74: shutdownWriter();
75: }
76:
77: /**
78: * Shutdown Writer.
79: */
80: protected synchronized void shutdownWriter() {
81: final Writer writer = m_output;
82: m_output = null;
83:
84: try {
85: if (null != writer) {
86: writer.close();
87: }
88: } catch (final IOException ioe) {
89: getErrorHandler().error("Error closing Writer", ioe, null);
90: }
91: }
92: }
|