1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.io;
19
20 import java.io.FilterOutputStream;
21 import java.io.IOException;
22 import java.io.OutputStream;
23 import java.nio.charset.Charset;
24
25 import org.apache.logging.log4j.Level;
26 import org.apache.logging.log4j.Marker;
27 import org.apache.logging.log4j.spi.ExtendedLogger;
28
29
30
31
32
33
34
35
36
37 public class LoggerFilterOutputStream extends FilterOutputStream {
38 private static final String FQCN = LoggerFilterOutputStream.class.getName();
39
40 private final ByteStreamLogger logger;
41 private final String fqcn;
42
43 protected LoggerFilterOutputStream(final OutputStream out, final Charset charset, final ExtendedLogger logger,
44 final String fqcn, final Level level, final Marker marker) {
45 super(out);
46 this.logger = new ByteStreamLogger(logger, level, marker, charset);
47 this.fqcn = fqcn == null ? FQCN : fqcn;
48 }
49
50 @Override
51 public void close() throws IOException {
52 this.out.close();
53 this.logger.close(this.fqcn);
54 }
55
56 @Override
57 public void flush() throws IOException {
58 this.out.flush();
59 }
60
61 @Override
62 public String toString() {
63 return LoggerFilterOutputStream.class.getSimpleName() + "{stream=" + this.out + '}';
64 }
65
66 @Override
67 public void write(final byte[] b) throws IOException {
68 this.out.write(b);
69 this.logger.put(this.fqcn, b, 0, b.length);
70 }
71
72 @Override
73 public void write(final byte[] b, final int off, final int len) throws IOException {
74 this.out.write(b, off, len);
75 this.logger.put(this.fqcn, b, off, len);
76 }
77
78 @Override
79 public void write(final int b) throws IOException {
80 this.out.write(b);
81 this.logger.put(this.fqcn, (byte) (b & 0xFF));
82 }
83 }