我们的项目使用System.out.println()或System.err.println()来输出调试消息.现在我们要使用log4j将这些输出定向到日志文件而不仅仅是控制台.为了避免影响或风险,我们不想做的全部替换"的System.out.println()"和"logger.debug",但只是想也许写一些代码,使这些输出重定向到的log4j日志文件是没有仍在使用System.out.println()的每个类中的代码更改(我们知道这是不好的做法,但我们不想进行全局搜索和当前替换).可能吗?谢谢.
我想这是可能的,虽然这绝对是一个坏主意.你应该咬紧牙关并更换所有System.out.printXXx()和System.err.printXXx()电话.
(您不必在一次重大变更中执行此操作,并且您不必使用自动搜索/替换来执行此操作...如果这些事情让您感到不舒服.)
您可以更改这些流去使用System.setOut,并System.setErr以使它们指向一个log4j的日志文件.然而:
更复杂的替代方法是创建特殊的OutputStream对象来拦截输出并将其转换为对log4j Logger的调用.但这也会有问题:
out和一个用于err)