在 log4j/log4net 中捕获标准输出

And*_*ite 4 c# java logging stdout

我有一个用 Java 写入标准输出的库。我想使用 log4j 在日志中捕获此输出。(这个库不是我写的,所以我无法控制库内的代码)。

是否有捷径可寻?System.setOut 是正确的方法吗?我传递给 System.setOut 的是什么?

另外,您将如何在 .NET/C# 中执行此操作?

Cli*_*int 5

一种解决方案是将OutputStream. 您只需执行write( int b ). 然后在构造函数PrintStream中用你的创建一个OutputStream

它可能看起来像:

public class L4JOS extends OutputStream {
  logger = Logger.getLogger( "std.out" );
  private int lineEnd = (int)'\n';
  private ByteArrayOutputStream baos = new ByteArrayOutputStream();

  public void write( int b ) throws IOException {
    baos.write( b );
    if ( b == lineEnd ) {
      logger.info( baos.toString() );
      baos.reset();
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

如果它是多线程的,那么你有更多的工作。并确保 appender 没有转到 System.out。