View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.logging.log4j.io;
19  
20  import java.io.PrintWriter;
21  import java.io.StringWriter;
22  import java.io.Writer;
23  import java.util.Locale;
24  
25  import org.apache.logging.log4j.Level;
26  import org.apache.logging.log4j.Marker;
27  import org.apache.logging.log4j.io.internal.InternalPrintWriter;
28  import org.apache.logging.log4j.spi.ExtendedLogger;
29  
30  /**
31   * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface
32   * that follows the {@link java.io.PrintWriter} methods in spirit, but doesn't require output to any external writer.
33   * <p>
34   * Integration with JDBC logging can be as simple as:
35   * </p>
36   * <pre>
37   *     PrintWriter pw = IoBuilder.forLogger().setLevel(Level.DEBUG).buildPrintWriter();
38   *     DriverManager.setLogWriter(pw);
39   *     DataSource ds = ...
40   *     ds.setLogWriter(pw);
41   * </pre>
42   *
43   * @since 2.1
44   */
45  // TODO
46  // All method implementations that call only writer.are apparently required for the unit tests to pass.
47  // Not sure if this a bug in the tests or a feature.
48  public class LoggerPrintWriter extends PrintWriter {
49      private static final String FQCN = LoggerPrintWriter.class.getName();
50      private final InternalPrintWriter writer;
51  
52      protected LoggerPrintWriter(final ExtendedLogger logger, final boolean autoFlush, final String fqcn,
53                                  final Level level, final Marker marker) {
54          super(new StringWriter());
55          writer = new InternalPrintWriter(logger, autoFlush, fqcn == null ? FQCN : fqcn, level, marker);
56      }
57  
58      protected LoggerPrintWriter(final Writer writer, final boolean autoFlush, final ExtendedLogger logger,
59                                  final String fqcn, final Level level, final Marker marker) {
60          super(writer);
61          this.writer = new InternalPrintWriter(writer, autoFlush, logger, fqcn == null ? FQCN : fqcn, level, marker);
62      }
63  
64      @Override
65      public LoggerPrintWriter append(final char c) {
66          writer.append(c);
67          return this;
68      }
69  
70      @Override
71      public LoggerPrintWriter append(final CharSequence csq) {
72          writer.append(csq);
73          return this;
74      }
75  
76      @Override
77      public LoggerPrintWriter append(final CharSequence csq, final int start, final int end) {
78          writer.append(csq, start, end);
79          return this;
80      }
81  
82      @Override
83      public boolean checkError() {
84          return writer.checkError();
85      }
86  
87      @Override
88      public void close() {
89          writer.close();
90      }
91  
92      @Override
93      public void flush() {
94          writer.flush();
95      }
96  
97      @Override
98      public LoggerPrintWriter format(final Locale l, final String format, final Object... args) {
99          writer.format(l, format, args);
100         return this;
101     }
102 
103     @Override
104     public LoggerPrintWriter format(final String format, final Object... args) {
105         writer.format(format, args);
106         return this;
107     }
108 
109     @Override
110     public void print(final boolean b) {
111         writer.print(b);
112     }
113 
114     @Override
115     public void print(final char c) {
116         writer.print(c);
117     }
118 
119     @Override
120     public void print(final char[] s) {
121         writer.print(s);
122     }
123 
124     @Override
125     public void print(final double d) {
126         writer.print(d);
127     }
128 
129     @Override
130     public void print(final float f) {
131         writer.print(f);
132     }
133 
134     @Override
135     public void print(final int i) {
136         writer.print(i);
137     }
138 
139     @Override
140     public void print(final long l) {
141         writer.print(l);
142     }
143 
144     @Override
145     public void print(final Object obj) {
146         writer.print(obj);
147     }
148 
149     @Override
150     public void print(final String s) {
151         writer.print(s);
152     }
153 
154     @Override
155     public LoggerPrintWriter printf(final Locale l, final String format, final Object... args) {
156         writer.printf(l, format, args);
157         return this;
158     }
159 
160     @Override
161     public LoggerPrintWriter printf(final String format, final Object... args) {
162         writer.printf(format, args);
163         return this;
164     }
165 
166     @Override
167     public void println() {
168         writer.println();
169     }
170 
171     @Override
172     public void println(final boolean x) {
173         writer.println(x);
174     }
175 
176     @Override
177     public void println(final char x) {
178         writer.println(x);
179     }
180 
181     @Override
182     public void println(final char[] x) {
183         writer.println(x);
184     }
185 
186     @Override
187     public void println(final double x) {
188         writer.println(x);
189     }
190 
191     @Override
192     public void println(final float x) {
193         writer.println(x);
194     }
195 
196     @Override
197     public void println(final int x) {
198         writer.println(x);
199     }
200 
201     @Override
202     public void println(final long x) {
203         writer.println(x);
204     }
205 
206     @Override
207     public void println(final Object x) {
208         writer.println(x);
209     }
210 
211     @Override
212     public void println(final String x) {
213         writer.println(x);
214     }
215 
216     @Override
217     public String toString() {
218         return LoggerPrintWriter.class.getSimpleName() + writer.toString();
219     }
220 
221     @Override
222     public void write(final char[] buf) {
223         writer.write(buf);
224     }
225 
226     @Override
227     public void write(final char[] buf, final int off, final int len) {
228         writer.write(buf, off, len);
229     }
230 
231     @Override
232     public void write(final int c) {
233         writer.write(c);
234     }
235 
236     @Override
237     public void write(final String s) {
238         writer.write(s);
239     }
240 
241     @Override
242     public void write(final String s, final int off, final int len) {
243         writer.write(s, off, len);
244     }
245 }