使用log4j的日志流数据



我正在从http连接获取流数据。我想使用log4j将流记录到日志文件中。

我需要这个流进一步做一些其他操作(必须保留)

我该怎么做?

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");
InputStream xml = connection.getInputStream();

我试过这个:

StreamUtils.copy(xml, new LogOutputStreamUtil(log, Level.INFO));

其中LogOutputStreamUtil来自http://www.java2s.com/Open-Source/Java/Testing/jacareto/jacareto/toolkit/log4j/LogOutputStream.java.htm

但一旦它被记录下来。流正在关闭:(

简单的解决方案是编写自己的inputStream包装

类似于:

class LogingInputStream extends BufferedStream {
    ByteArrayOutputStream copy4log = new ByteArrayOutputStream();
    InputStream source;
    public LogingInputStream( InputStream source ) { this.source = source; }
    public int read() {
        int value = source.read()
        logCopy.write( value );
        return value;
    }
    public void close() {
        source.close();
        StreamUtils.copy(xml, new LogOutputStreamUtil(copy4log, Level.INFO));
        copy4log.close();
    }
    .....more code here
}

总之,一般的想法是您需要截取inputstream读取方法。

还有其他方法可以实现这一点,比如将源inputStream复制到缓冲区(字节数组、字符串或任何适合您的东西),记录该缓冲区,并在缓冲区周围创建另一个inputStream,并将其返回给调用者,而不是源inputStream。它做起来更简单,但它是正确的解决方案取决于您的用例。

这是一个非常古老的问题,但现在做这件事的另一个选择是使用log4J IOStreams类。这些可以让你呈现一个流式处理界面,但结果会转到你选择的日志文件中。

相关内容

  • 没有找到相关文章

最新更新