如何整合java.util.logging,System。(out | err)和Jetty日志记录?

时间:2013-02-03 04:09:48

标签: java jetty slf4j logback java.util.logging

我读到了如何将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

1 个答案:

答案 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应用程序。