jetty maven插件不显示sysout和日志消息

jetty maven插件不显示sysout和日志消息,maven,log4j,jetty,maven-jetty-plugin,Maven,Log4j,Jetty,Maven Jetty Plugin,我刚刚开始使用jetty maven插件 我发现一些关于日志和系统输出的奇怪行为 当我和maven开始jetty的时候 mvn -Djetty.port=8093 -Dlog4j.configuration=file:src/log4j.properties jetty:run 我看到一条消息 之后,当我请求url时,浏览器会显示一个正确的页面,但与house完全不同 Hovewer,来自Jetty、Spring等的一些其他信息在那里打印出来 @Controller public class

我刚刚开始使用jetty maven插件

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

当我和maven开始jetty的时候

mvn -Djetty.port=8093 -Dlog4j.configuration=file:src/log4j.properties jetty:run
我看到一条消息

之后,当我请求url时,浏览器会显示一个正确的页面,但与house完全不同

Hovewer,来自Jetty、Spring等的一些其他信息在那里打印出来

@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"));

    }
}
@控制器
公共类AppAdminClientJsonController{
专用最终静态记录器=
getLogger(AppAdminClientJsonController.class);
公共AppAdminClientJsonController(){
System.out.println(“------------AppAdminClientJsonController-----------------”;
}
@RequestMapping(value=“/admin/houses”,method=RequestMethod.GET)
公共@ResponseBody
名单{
记录器。警告(“房子!”);
System.out.println(“house!!”);
返回数组.asList(新房子(“某个地点”)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>

org.mortbay.jetty
jetty maven插件
8.1.8.v20121106
${basedir}/${WebApprotPath}
10
/
${basedir}/${webapprotopath}/WEB-INF/WEB.xml
更新

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

在SpringInit阶段,它是:java.io。PrintStream@175390b7


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

码头未登录log4j

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

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

但是,如果类路径上存在slf4j,jetty日志框架将使用slf4j

如果您想登录到log4j,则需要通过slf4j进行登录。 要启用此功能,您需要在jetty maven插件配置的依赖项中存在以下依赖项

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

org.slf4j

我已经试过了。我可以为Jetty提供log4j,Jetty日志可以在那里打印,但应用程序日志不能。Jetty确实读取了我的log4j.properties,并在那里写了一些日志,但我无法在那里看到我的System.out消息和应用程序日志消息。我使用slf4j进行日志记录。我可以在某个地方主持我的项目,这样你就可以查看它,是吗?这里有几个假设是错误的。System.out和System.err由非日志框架的内容捕获。aka
etc/jetty logging.xml
。因此,停止依赖System.out和System.err。其次,在服务器和webapp之间存在类加载器隔离。如果您希望webapp具有log4j,请在其中包括log4j库以及您的log4j配置。如果你想让webapp使用服务器log4j和配置,你有一个完全不同的问题,这个问题以前在stackoverflow中已经得到了回答。哇,谢谢你对类加载器的提示!我就这样挖。