记录通过 InputStream 的所有内容
Logging everything that goes through an InputStream
我正在使用 Gson 处理 Json 响应。有时我会遇到异常,但不幸的是我没有足够的上下文来查明问题的确切位置。
JsonReader创建如下:
private JsonReader getJsonReader(final HttpEntity entity) throws IOException {
final InputStreamReader reader = new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8);
return new JsonReader(reader);
}
我的想法是子类化 InputStreamReader
并记录所有经过它的内容,以便在抛出异常时有更多上下文。
有没有更好的方法?
我创建了以下两个子类:
public class LoggingReader extends InputStreamReader {
private char[] lastRead;
public LoggingReader(final InputStream inputStream, final Charset charset) {
super(inputStream, charset);
}
@Override
public int read(final char[] chars, final int i, final int i1) throws IOException {
final int result = super.read(chars, i, i1);
lastRead = chars;
return result;
}
public String getLastRead() {
return new String(lastRead);
}
}
public class LoggingJsonReader extends JsonReader {
private final LoggingReader reader;
public LoggingJsonReader(final LoggingReader in) {
super(in);
this.reader = in;
}
public String getLastRead() {
return reader.getLastRead();
}
}
现在,当抛出异常时,我会这样做:
catch (Exception ex) {
if (reader instanceof LoggingJsonReader) {
LoggingJsonReader lReader = (LoggingJsonReader) reader;
log.error(lReader.getLastRead());
}
我正在使用 Gson 处理 Json 响应。有时我会遇到异常,但不幸的是我没有足够的上下文来查明问题的确切位置。
JsonReader创建如下:
private JsonReader getJsonReader(final HttpEntity entity) throws IOException {
final InputStreamReader reader = new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8);
return new JsonReader(reader);
}
我的想法是子类化 InputStreamReader
并记录所有经过它的内容,以便在抛出异常时有更多上下文。
有没有更好的方法?
我创建了以下两个子类:
public class LoggingReader extends InputStreamReader {
private char[] lastRead;
public LoggingReader(final InputStream inputStream, final Charset charset) {
super(inputStream, charset);
}
@Override
public int read(final char[] chars, final int i, final int i1) throws IOException {
final int result = super.read(chars, i, i1);
lastRead = chars;
return result;
}
public String getLastRead() {
return new String(lastRead);
}
}
public class LoggingJsonReader extends JsonReader {
private final LoggingReader reader;
public LoggingJsonReader(final LoggingReader in) {
super(in);
this.reader = in;
}
public String getLastRead() {
return reader.getLastRead();
}
}
现在,当抛出异常时,我会这样做:
catch (Exception ex) {
if (reader instanceof LoggingJsonReader) {
LoggingJsonReader lReader = (LoggingJsonReader) reader;
log.error(lReader.getLastRead());
}