将System.out / System.err重定向到log4j仅适用于某些jar

时间:2010-10-29 20:10:34

标签: java logging log4j

在我们的产品中,我们使用了许多外部库。我们使用log4j进行日志记录,大多数库也这样做,所以我们在appender中得到的大部分消息都很好。

但是有几个库只使用System.out和System.err。所以我正在寻找一种方法将System.out和System.err重定向到我们的log4j appenders 仅针对特定的jar ,其他使用log4j的库不应该受到影响,有时也打印到System.out和System.err,这些消息仍然应该去那里。

这有可能吗?

2 个答案:

答案 0 :(得分:1)

假设 - 从未尝试过

  • 创建自定义日志级别。等级应低于Level.ALL
  • 将std打印流覆盖到您自己的流中。使用自定义级别执行控制台和日志输出
  • 为您所需的包创建新类别,并将其日志记录级别设置为自定义日志记录级别

有用的示例代码

http://blogs.oracle.com/nickstephen/entry/java_redirecting_system_out_and

log4j redirect stdout to DailyRollingFileAppender

答案 1 :(得分:1)

不确定是否可以将输出流提供给log4j appender,但如果您只想将其发送到日志文件,则可以将system.out指向如下文件:



 File file  = new File("my.log");
 PrintStream printStream = new PrintStream(new FilleOutputStream(file));
 System.setOut(printStream);


您可以对System.err

执行相同的操作

我喜欢Faheem的第一个链接,它有滚动文件的解决方案。