001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018package org.apache.logging.log4j.io; 019 020import java.io.IOException; 021import java.io.PrintWriter; 022import java.io.StringWriter; 023import java.io.Writer; 024import java.util.Locale; 025 026import org.apache.logging.log4j.Level; 027import org.apache.logging.log4j.Marker; 028import org.apache.logging.log4j.io.internal.InternalPrintWriter; 029import org.apache.logging.log4j.spi.ExtendedLogger; 030 031/** 032 * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface 033 * that follows the {@link java.io.PrintWriter} methods in spirit, but doesn't require output to any external writer. 034 * <p> 035 * Integration with JDBC logging can be as simple as: 036 * </p> 037 * <pre> 038 * PrintWriter pw = IoBuilder.forLogger().setLevel(Level.DEBUG).buildPrintWriter(); 039 * DriverManager.setLogWriter(pw); 040 * DataSource ds = ... 041 * ds.setLogWriter(pw); 042 * </pre> 043 * 044 * @since 2.1 045 */ 046// TODO 047// All method implementations that call only writer.are apparently required for the unit tests to pass. 048// Not sure if this a bug in the tests or a feature. 049public class LoggerPrintWriter extends PrintWriter { 050 private static final String FQCN = LoggerPrintWriter.class.getName(); 051 private final InternalPrintWriter writer; 052 053 protected LoggerPrintWriter(final ExtendedLogger logger, final boolean autoFlush, final String fqcn, 054 final Level level, final Marker marker) { 055 super(new StringWriter()); 056 writer = new InternalPrintWriter(logger, autoFlush, fqcn == null ? FQCN : fqcn, level, marker); 057 } 058 059 protected LoggerPrintWriter(final Writer writer, final boolean autoFlush, final ExtendedLogger logger, 060 final String fqcn, final Level level, final Marker marker) { 061 super(writer); 062 this.writer = new InternalPrintWriter(writer, autoFlush, logger, fqcn == null ? FQCN : fqcn, level, marker); 063 } 064 065 @Override 066 public LoggerPrintWriter append(final char c) { 067 writer.append(c); 068 return this; 069 } 070 071 @Override 072 public LoggerPrintWriter append(final CharSequence csq) { 073 writer.append(csq); 074 return this; 075 } 076 077 @Override 078 public LoggerPrintWriter append(final CharSequence csq, final int start, final int end) { 079 writer.append(csq, start, end); 080 return this; 081 } 082 083 @Override 084 public boolean checkError() { 085 return writer.checkError(); 086 } 087 088 @Override 089 public void close() { 090 writer.close(); 091 } 092 093 @Override 094 public void flush() { 095 writer.flush(); 096 } 097 098 @Override 099 public LoggerPrintWriter format(final Locale l, final String format, final Object... args) { 100 writer.format(l, format, args); 101 return this; 102 } 103 104 @Override 105 public LoggerPrintWriter format(final String format, final Object... args) { 106 writer.format(format, args); 107 return this; 108 } 109 110 @Override 111 public void print(final boolean b) { 112 writer.print(b); 113 } 114 115 @Override 116 public void print(final char c) { 117 writer.print(c); 118 } 119 120 @Override 121 public void print(final char[] s) { 122 writer.print(s); 123 } 124 125 @Override 126 public void print(final double d) { 127 writer.print(d); 128 } 129 130 @Override 131 public void print(final float f) { 132 writer.print(f); 133 } 134 135 @Override 136 public void print(final int i) { 137 writer.print(i); 138 } 139 140 @Override 141 public void print(final long l) { 142 writer.print(l); 143 } 144 145 @Override 146 public void print(final Object obj) { 147 writer.print(obj); 148 } 149 150 @Override 151 public void print(final String s) { 152 writer.print(s); 153 } 154 155 @Override 156 public LoggerPrintWriter printf(final Locale l, final String format, final Object... args) { 157 writer.printf(l, format, args); 158 return this; 159 } 160 161 @Override 162 public LoggerPrintWriter printf(final String format, final Object... args) { 163 writer.printf(format, args); 164 return this; 165 } 166 167 @Override 168 public void println() { 169 writer.println(); 170 } 171 172 @Override 173 public void println(final boolean x) { 174 writer.println(x); 175 } 176 177 @Override 178 public void println(final char x) { 179 writer.println(x); 180 } 181 182 @Override 183 public void println(final char[] x) { 184 writer.println(x); 185 } 186 187 @Override 188 public void println(final double x) { 189 writer.println(x); 190 } 191 192 @Override 193 public void println(final float x) { 194 writer.println(x); 195 } 196 197 @Override 198 public void println(final int x) { 199 writer.println(x); 200 } 201 202 @Override 203 public void println(final long x) { 204 writer.println(x); 205 } 206 207 @Override 208 public void println(final Object x) { 209 writer.println(x); 210 } 211 212 @Override 213 public void println(final String x) { 214 writer.println(x); 215 } 216 217 @Override 218 public String toString() { 219 return LoggerPrintWriter.class.getSimpleName() + writer.toString(); 220 } 221 222 @Override 223 public void write(final char[] buf) { 224 writer.write(buf); 225 } 226 227 @Override 228 public void write(final char[] buf, final int off, final int len) { 229 writer.write(buf, off, len); 230 } 231 232 @Override 233 public void write(final int c) { 234 writer.write(c); 235 } 236 237 @Override 238 public void write(final String s) { 239 writer.write(s); 240 } 241 242 @Override 243 public void write(final String s, final int off, final int len) { 244 writer.write(s, off, len); 245 } 246}