jetty maven插件不显示sysout和日志消息
我刚刚开始使用jetty maven插件 我发现一些关于日志和系统输出的奇怪行为 当我和maven开始jetty的时候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
mvn -Djetty.port=8093 -Dlog4j.configuration=file:src/log4j.properties jetty:run
我看到一条消息
之后,当我请求url时,浏览器会显示一个正确的页面,但与house完全不同控制台或日志文件中的strong>
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由非日志框架的内容捕获。akaetc/jetty logging.xml
。因此,停止依赖System.out和System.err。其次,在服务器和webapp之间存在类加载器隔离。如果您希望webapp具有log4j,请在其中包括log4j库以及您的log4j配置。如果你想让webapp使用服务器log4j和配置,你有一个完全不同的问题,这个问题以前在stackoverflow中已经得到了回答。哇,谢谢你对类加载器的提示!我就这样挖。