代码之家  ›  专栏  ›  技术社区  ›  dave

如何阻止Java库从打印到控制台?

  •  8
  • dave  · 技术社区  · 15 年前

    我正在使用一个库,当我引用它时,它会将一堆多余的信息打印到控制台上。有没有办法使库的输出静音?

    7 回复  |  直到 13 年前
        1
  •  15
  •   Bozho    15 年前

    如果它使用日志框架(log4j、commons logging等),则可以编辑/创建一个属性文件来指示高日志树占用。在log4j中,如下所示:

    log4j.logger.org.library=error
    

    如果库正在使用 System.out 首先,那不是一个好的图书馆。你可以改变 PrintStream 通过呼叫 System.setOut(yourDummyPrintStream) (和) System.setErr(..) )您的虚拟打印流只会吞咽数据,而不会在任何地方打印。

        2
  •  7
  •   Jan    15 年前

    你有没有试过用 System.setOut() System.setErr() ?

        3
  •  5
  •   Bill K    15 年前

    我投票赞成简的回答,并想补充:

    使用setout意味着您不能再在程序中打印到system.out。

    你可以的

    PrintStream oldOut=System.out
    

    首先保存它,然后调用setout更改它——然后打印到oldout。

    我已经把它用作一个小型的日志记录器——抓取system.out,用我自己的流替换它,让我自己的流抓取一个堆栈跟踪并找出调用方法,这样它就可以在转发到原始系统out之前添加方法名。

    速度非常慢,但很适合调试。有一个设置,这样您就可以恢复到只打印字符串、隐藏所有输出或筛选消息来自哪个方法(这是我的主要用法,隐藏所有其他垃圾,这样我就可以看到自己的输出)。

        4
  •  2
  •   whiskeysierra    15 年前

    考虑使用aspectj,它可以用您选择的语句(一个日志语句)替换所有出现的system.out.println()。这也适用于第三方JAR文件(查找加载时编织)。

        5
  •  0
  •   Teja Kantamneni    15 年前

    我认为没有哪个像样/健全的库使用system.out来记录消息。所以我可以安全地假设它使用某种日志框架。将特定包配置为更高的日志记录级别,如“错误”或“致命”,这样您就不会看到这些消息。

        6
  •  0
  •   kgrad    15 年前

    库可能使用logger、log4j或slf4j。您可以为该记录器创建一个配置文件,然后将日志级别设置为warn或更高。这将阻止打印信息。

        7
  •  0
  •   mP.    13 年前

    如果lib使用prints,我将使用asm将所有sys.out.printxxx替换为对另一个类的调用,该类的方法签名与吞咽的方法类似。

    推荐文章