0

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

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

当我用 Maven 启动码头时

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

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

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

然而,来自 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

4

1 回答 1

1

Jetty 不登录到 log4j。

它有自己的记录器框架(顺便说一下早于 log4j)。

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

但是,如果类路径中存在 slf4j,jetty 日志框架将使用 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

于 2013-02-10T05:48:24.067 回答