【问题标题】:How does Tomcat redirect verbose:gc console output to catalina.outTomcat如何将verbose:gc控制台输出重定向到catalina.out
【发布时间】:2012-01-13 01:14:45
【问题描述】:

我需要了解 Tomcat 如何能够捕获 JVM 垃圾收集控制台输出日志并将其放入 catalina.out。

我尝试重定向 System.outSystem.err,但没有成功。我无法获得 GC 日志的输出。
但是,当在 Tomcat 中激活 -verbose:gc (在 catalina.sh,*JAVA_OPT* 中)并稍后检查 catalina.out 中的输出时,我能够看到 GC日志。这怎么可能? Tomcat 是如何将该输出重定向到文件的?

也许您知道使用 java 代码在某些 java 应用程序中重定向 GC 日志输出的任何方法吗?

提前谢谢你。

【问题讨论】:

  • 你试过java.lang.System.setErr(...)java.lang.System.setOut(...)吗?
  • 是的,我使用了 System.setErr() 和 System.setOut()。这不起作用,新输出(或错误源)被重定向,我使用 System.out.print() 编写的所有内容都写入我用作输出目标的文件中,但是当 GC 打印某些内容时,它不会通过“输出” " 变量(也不是低谷错误)并最终出现在控制台上。
  • 我应该更深入地查看 catalina.sh。启动命令以>> "$CATALINA_OUT" 2>&1 "&" 结尾,因此控制台中出现的所有内容都被重定向到 catalina.out 。问题解决了。

标签: java linux tomcat logging


【解决方案1】:

Tomcat 确实必须使用 System.setErr() 和 System.setOut()。在这个网站的其他地方有一个关于它如何工作的精彩讨论:java: "final" System.out, System.in and System.err?

Tomcat 将所有控制台输出重定向到 catalina.out。您或许可以通过 JULI 日志设置进行配置。

【讨论】:

    【解决方案2】:

    与代码无关; catalina.out 文件不是“真正的日志”,它只是标准 tomcat 启动命令将其所有输出推送到其中的文件。

    换句话说,这是一个 shell 问题,而不是 java 问题 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2011-10-15
      • 2013-12-07
      • 2011-03-08
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多