我刚刚开始使用 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