我阅读了如何将 java.util.logging 日志和 System.(out|err) 输出通过管道传输到 slf4j:
但它需要一些 jar/classes 和代码在 jetty 启动时执行。基本上是这样的:
SLF4JBridgeHandler.install()//管道 j.u.l
SysOutOverSLF4J.sendSystemOutAndErrToSLF4J()//管道 System.(out|err)
我知道如何添加可用于 jetty 的所需 jars/类(只需将 sysout-over-slf4j.jar 和 jul-to-slf4j.jar 添加到 $JETTY_HOME/lib/ext),但我不知道知道如何在服务器启动时运行代码 abobe 以便 jetty 将合并输出(sysout 和 j.u.l)配置为 slf4j。我可以为每个 webapp 运行该代码,但为了使事情正确,它应该由 jetty 完成,而不是由需要此行为的每个 webapp 完成。
这应该以不同的方式完成吗?有没有非伏都教的方法来做到这一点?
请让你的答案是 jetty 版本 >= 8
最佳答案
我不知道这是否有效,但你试过了吗?
public class MyWebappServlet ... {
static {
// to pipe j.u.l
SLF4JBridgeHandler.install();
// to pipe System.(out|err)
SysOutOverSLF4J.sendSystemOutAndErrToSLF4J();
}
...
在你的 web.xml
中:
<servlet>
<servlet-name>MyWebapp</servlet-name>
<servlet-class>MyWebappServlet</servlet-class>
</servlet>
它可能不会从一开始就拦截所有内容,但是一旦 Jetty 加载了您的 MyWebappServlet
类,日志记录就应该被重定向。
否则,您将需要使用这两行自定义您的 Jetty。
更新:
还有另一种方法 - 使用像 BCEL 这样的 main()
包装器启动 Jetty,但仅在完成这些日志记录重定向之后。
在这种情况下,命令行将是这样的:
java my.custom.JavaWrapper org.eclipse.jetty.start.Main [arguments]
如果这可以在 jetty.sh
中完成,那么它将应用于该服务器实例中的所有 Web 应用程序。
关于java - 如何整合 java.util.logging、System.(out|err) 和 Jetty 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14669416/