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.internal; 019 020import java.io.IOException; 021import java.io.OutputStream; 022import java.io.PrintStream; 023import java.io.UnsupportedEncodingException; 024import java.nio.charset.Charset; 025import java.util.Locale; 026 027import org.apache.logging.log4j.Level; 028import org.apache.logging.log4j.Marker; 029import org.apache.logging.log4j.spi.ExtendedLogger; 030 031/** 032 * Internal class used primarily to allow location calculations to work properly. 033 * 034 * @since 2.12 035 */ 036public class InternalPrintStream extends PrintStream { 037 038 public InternalPrintStream(final ExtendedLogger logger, final boolean autoFlush, final Charset charset, 039 final String fqcn, final Level level, final Marker marker) 040 throws UnsupportedEncodingException { 041 super(new InternalOutputStream(logger, level, marker, ensureNonNull(charset), fqcn), 042 autoFlush, ensureNonNull(charset).name()); 043 } 044 045 public InternalPrintStream(final OutputStream out, final boolean autoFlush, final Charset charset, 046 final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) 047 throws UnsupportedEncodingException { 048 super(new InternalFilterOutputStream(out, ensureNonNull(charset), logger, fqcn, level, 049 marker), autoFlush, ensureNonNull(charset).name()); 050 } 051 052 private static Charset ensureNonNull(final Charset charset) { 053 return charset == null ? Charset.defaultCharset() : charset; 054 } 055 056 @Override 057 public InternalPrintStream append(final char c) { 058 super.append(c); 059 return this; 060 } 061 062 @Override 063 public InternalPrintStream append(final CharSequence csq) { 064 super.append(csq); 065 return this; 066 } 067 068 @Override 069 public InternalPrintStream append(final CharSequence csq, final int start, final int end) { 070 super.append(csq, start, end); 071 return this; 072 } 073 074 @Override 075 public boolean checkError() { 076 return super.checkError(); 077 } 078 079 @Override 080 public void close() { 081 super.close(); 082 } 083 084 @Override 085 public void flush() { 086 super.flush(); 087 } 088 089 @Override 090 public InternalPrintStream format(final Locale l, final String format, final Object... args) { 091 super.format(l, format, args); 092 return this; 093 } 094 095 @Override 096 public InternalPrintStream format(final String format, final Object... args) { 097 super.format(format, args); 098 return this; 099 } 100 101 @Override 102 public void print(final boolean b) { 103 super.print(b); 104 } 105 106 @Override 107 public void print(final char c) { 108 super.print(c); 109 } 110 111 @Override 112 public void print(final char[] s) { 113 super.print(s); 114 } 115 116 @Override 117 public void print(final double d) { 118 super.print(d); 119 } 120 121 @Override 122 public void print(final float f) { 123 super.print(f); 124 } 125 126 @Override 127 public void print(final int i) { 128 super.print(i); 129 } 130 131 @Override 132 public void print(final long l) { 133 super.print(l); 134 } 135 136 @Override 137 public void print(final Object obj) { 138 super.print(obj); 139 } 140 141 @Override 142 public void print(final String s) { 143 super.print(s); 144 } 145 146 @Override 147 public InternalPrintStream printf(final Locale l, final String format, final Object... args) { 148 super.printf(l, format, args); 149 return this; 150 } 151 152 @Override 153 public InternalPrintStream printf(final String format, final Object... args) { 154 super.printf(format, args); 155 return this; 156 } 157 158 @Override 159 public void println() { 160 super.println(); 161 } 162 163 @Override 164 public void println(final boolean x) { 165 super.println(x); 166 } 167 168 @Override 169 public void println(final char x) { 170 super.println(x); 171 } 172 173 @Override 174 public void println(final char[] x) { 175 super.println(x); 176 } 177 178 @Override 179 public void println(final double x) { 180 super.println(x); 181 } 182 183 @Override 184 public void println(final float x) { 185 super.println(x); 186 } 187 188 @Override 189 public void println(final int x) { 190 super.println(x); 191 } 192 193 @Override 194 public void println(final long x) { 195 super.println(x); 196 } 197 198 @Override 199 public void println(final Object x) { 200 super.println(x); 201 } 202 203 @Override 204 public void println(final String x) { 205 super.println(x); 206 } 207 208 @Override 209 public String toString() { 210 return "{stream=" + this.out + '}'; 211 } 212 213 @Override 214 public void write(final byte[] b) throws IOException { 215 super.write(b); 216 } 217 218 @Override 219 public void write(final byte[] b, final int off, final int len) { 220 super.write(b, off, len); 221 } 222 223 @Override 224 public void write(final int b) { 225 super.write(b); 226 } 227}