jetty-maven-plugin不显示sysout和日志消息

时间:2013-02-09 11:50:37

标签: maven log4j jetty maven-jetty-plugin

我刚开始使用jetty-maven-plugin。

我发现了一些关于日志和系统输出的奇怪行为。

当我用maven开始码头时

mvn -Djetty.port=8093 -Dlog4j.configuration=file:src/log4j.properties jetty:run

我看到bean构造函数sysout消息。

之后,当我请求网址http://my.local.host:8093/api/rest/admin/houses时,浏览器会向我显示正确的页面,但与控制台或日志文件中的 house!没有任何相似之处。

Hovewer,来自Jetty,Spring等的其他一些INFO消息也会在那里打印出来。

@Controller
public class AppAdminClientJsonController {

    private final static Logger logger = 
         LoggerFactory.getLogger(AppAdminClientJsonController.class);

    public AppAdminClientJsonController() {
         System.out.println("----------AppAdminClientJsonController----------");
    }

    @RequestMapping(value = "/admin/houses", method = RequestMethod.GET)
    public @ResponseBody
    List<House> getHouses() {

        logger.warn("house!");
        System.out.println("house!!");

        return Arrays.asList(new House("somesite", "http://somesite.com"));

    }
}

因此,Jetty通常不尊重我的记录器,并以某种时髦的方式覆盖系统输出,因此在服务器启动并运行后不会打印任何内容。

这可以是什么?

插件在pom.xml中的部分

<plugin>
    <!-- http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin#Quick_Start:_Get_Up_and_Running -->
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.8.v20121106</version>
    <configuration>
        <webAppSourceDirectory>${basedir}/${webappRootPath}</webAppSourceDirectory>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <webAppConfig>
            <contextPath>/</contextPath>
            <descriptor>${basedir}/${webappRootPath}/WEB-INF/web.xml</descriptor>
        </webAppConfig>
    </configuration>
</plugin>

更新

我刚刚尝试打印System.out对象本身。我是对的,Jetty超越了它:

在春季初始阶段,它是:java.io.PrintStream@175390b7

服务器启动后,它变为:java.io.PrintStream@9c783fc

1 个答案:

答案 0 :(得分:1)

Jetty不会登录到log4j。

它有自己的记录器框架(偶然在log4j之前)。

默认情况下,它将使用自己的记录器框架注销System.err。 此外,jetty的默认启动配置包括etc/jetty-logging.xml,它将所有System.out和System.err路由到滚动日志文件。

但是,如果在类路径中存在,则跳码日志框架将使用slf4j。

如果要登录log4j,则需要通过slf4j进行操作。 要启用此功能,您需要在jetty-maven-plugin配置的依赖项中存在以下依赖项...

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>***your preferred version here***</version>
</dependency>

slf4j-log4j12的版本可用:http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.slf4j%22%20AND%20a%3A%22slf4j-log4j12%22