我读到了如何将java.util.logging日志和System。(out | err)输出通过管道输出到slf4j:
但它需要一些jar /类和代码才能在jetty启动时执行。基本上是这样的:
SLF4JBridgeHandler.install() // to pipe j.u.l
SysOutOverSLF4J.sendSystemOutAndErrToSLF4J() // to pipe System.(out|err)
我知道如何为jetty添加必需的jar /类(只需将sysout-over-slf4j.jar和jul-to-slf4j.jar添加到$ JETTY_HOME / lib / ext),但我不知道知道如何在服务器启动中运行代码abobe ,以便jetty将合并输出(sysout和jul)配置为slf4j。我可以按webapp运行该代码,但为了使事情正确,它应该由jetty完成,而不是每个需要此行为的webapp。
这应该以不同的方式完成吗?是否有非巫毒的方式来做到这一点?
请将您的答案换成码头版本> = 8
答案 0 :(得分:1)
我不知道这是否有用,但你试过吗?
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应用程序。