Log4j 日志记录 OutputStream 链接

Log4j Logging OutputStream chaining

我有一个遗留的 Java 应用程序,它使用 Log4j 作为日志记录工具。该应用程序缺少指标,因此我想找到一种方法来巧妙地检索一些基于 Java class 的指标。

问题是,我想在提供服务之前拦截所有 Log4j 日志记录。

这个想法的灵感来自 System.out 的链接,看起来像这样

TeeOutputStream myOut=new TeeOutputStream(System.out, mySpecificOut);
PrintStream ps = new PrintStream(myOut, true); //true - auto-flush after println
System.setOut(ps);

那么有没有一种方法可以链接 Log4j 输出流并在 Java 上完全控制它,因为我需要在记录之前做一些逻辑。

谢谢

是的,您可以使用

定义自己的流
LoggingOutputStream extends OutputStream {

并链以拦截日志

System.setOut(new PrintStream(new LoggingOutputStream(

看看this nice example based on innoq/log4j LoggingOutputStream