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}