有没有办法在嵌入式Jetty Logback中捕获容器生成的STDOUT?

时间:2018-10-19 08:32:54

标签: jetty stdout logback rollingfileappender

情况是:

->使用ConsoleAppender配置的使用登录的自制容器应用程序。不同的记录器根据软件包指定日志级别:

<logger name="com.mycompany.package1">
    <level value="DEBUG"/>
</logger>
<logger name="com.mycompany.package2">
    <level value="INFO"/>
</logger>

->使用RollingFileAppender配置的使用登录的嵌入式Jetty应用。

我需要将两个日志输出发送到相同的滚动文件,因此我试图在嵌入式Jetty应用程序中捕获容器STDOUT。有没有办法做到这一点?这是错误的做法吗?

注意:我可以同时访问两个logback.xml进行编辑。

1 个答案:

答案 0 :(得分:0)

如果您要进行ConsoleAppender的登录配置,则不要尝试捕获输出并再次记录它(您刚刚创建了一个循环)。

相反,只需将Jetty配置为将slf4j用于其自身的事件,而不使用RolloverFileOutputStreamconsole-capture module(来自jetty-home)。

最简单的方法是不执行任何操作,服务器类路径中仅存在slf4j-api-<ver>.jar足以使Jetty使用slf4j记录其自身的事件。

简而言之,您的服务器类路径需要:

  • slf4j-api-<ver>.jar
  • 您的logback jar(可能是logback-classic-<ver>.jarlogback-core-<ver>.jar
  • 类路径上的${jetty.base}/resources/目录,其中包含2个文件:
    • 一个jetty-logging.properties和一行org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
    • 您的注销配置文件。 (例如:logback.xml

请确保您使用Jetty's RollingFileOutputStream to capture System.out and/or System.err to a file