gpt4 book ai didi

java - 想要使 "System.out.println()"将消息打印到 log4j

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:16:11 25 4
gpt4 key购买 nike

我们的项目使用 System.out.println() 或 System.err.println() 来输出调试信息。现在我们想使用 log4j 将这些输出定向到日志文件,而不仅仅是控制台。为避免影响或风险,我们不想将所有“System.out.println()”替换为“logger.debug”,而只是想编写一些代码来使这些输出重定向到 log4j 日志文件,而不是每个类中的代码更改仍然使用 System.out.println()(我们知道这是不好的做法,但我们目前不想进行全局搜索和替换)。是否可以?谢谢。

最佳答案

我想这是可能的,尽管这绝对是个坏主意。您应该硬着头皮替换所有 System.out.printXXx()System.err.printXXx() 调用。

(您不必在一个大的更改中执行此操作,也不必使用自动搜索/替换来执行此操作……如果这些事情让您感到不舒服。)


您可以通过使用 System.setOutSystem.setErr 将它们指向 log4j 日志文件来更改这些流的去向。然而:

  • 您可能会遇到输出交错和/或日志文件截断的问题,具体取决于 log4j 附加程序的具体实现方式
  • 您不会获得 log4j 时间戳等
  • 您将无法通过 log4j 配置控制日志记录,因为您的重定向在 log4j 的背后进行
  • log4j 日志文件轮换无法正常工作

一个更复杂的替代方法是创建特殊的 OutputStream 对象来拦截输出并将其转换为对 log4j 记录器的调用。但这也会有问题:

  • 弄清楚每个“控制台日志消息”的结束位置可能很棘手,尤其是当您希望将多行控制台输出视为一个日志事件时
  • 您将只有有限的 log4j 可配置性,因为所有“控制台日志消息”都将通过一个 Logger(或者一个用于 out,一个用于 err)
  • 与普通的 log4j 日志记录相比,性能将是一个更大且更难处理的问题。

关于java - 想要使 "System.out.println()"将消息打印到 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com