2016-07-22 97 views
0

该方案如下 - 我有一个主java文件file1和一个jar文件调用Minimize。我创建了一个名为MinimizeTableclassobject,它在jar中定义。现在,这个对象的创建会导致一些行被打印到jar中定义的stdout。我只想重定向这个输出。除此之外,我的主文件有许多stdout行,必须将它们打印到stdout本身。无论如何只能重定向jar文件打印的内容,而不是其他内容? 我已经定义了下面的情况 -在java中重定向jar文件的stdout

class file1{ 
    public static void main(String[] args) 
    { 
     MinimizedTable M = new MinimizedTable(); //this instantly prints stuff out which I want to be redirected and not printed to stdout. 
     System.out.println("Hello"); //This line must be printed to stdout. 
    } 
    } 

是否有这样做不接触的jar文件的方法吗?希望我的解释有道理。

+1

您能否给一些洞察到其中'MinimizeTable'是什么?它位于专有的JAR文件中吗?它识别“log4j”吗?如果是这样,你可以通过Sundaraj评论达到你想要的。 – Carlos

回答

0

您可以Log4j的,类似于这样实现它...

log4j.logger.abc.xyz.MinimizedTable=OFF 

纯Java的解决方案,请参阅该SO question

0

无需任何外部的依赖,并与主要的轻微修改:

System.setOut(new FilteredOutput(System.out)); 

    MinimizedTable M = new MinimizedTable(); 

    System.out.println("Hello"); 

然后FilteredOutput是这样的:

import java.io.OutputStream; 
import java.io.PrintStream; 


public class FilteredOutput extends PrintStream { 

    public FilteredOutput(OutputStream out) { 
     super(out); 
    } 

    @Override 
    public void println(String x) { 

     if (Thread.currentThread().getStackTrace()[2].getClassName().equals(MinimizedTable.class.getName())) { 

      super.println("From MinimizedTable: "+x); 

     } else { 

     super.println(x); 

     } 
    } 

    ... 

}