我正在开发为客户端提供REST API的应用程序,为此,我决定使用JAX-RS
实现Jersey
和Spring
进行一些依赖注入。
今天我在日志中注意到,我的应用程序上下文似乎被加载了两次,例如:
2013-12-21 22:18:55 INFO ContextLoader:272 - Root WebApplicationContext: initialization started
2013-12-21 22:18:55 INFO ContextLoader:272 - Root WebApplicationContext: initialization started
我浏览了类似的帖子,但看到我的web.xml
文件,我似乎无法找到罪魁祸首:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>RestPowtorkiServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.powtorki.spring.PowtorkiApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RestPowtorkiServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!--
Apply Spring Security Filter to all REST Requests
-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
此外,我尝试从Jersey
存储库(https://github.com/jersey/jersey/tree/2.4.1/examples/helloworld-spring-webapp)运行示例应用程序,似乎它遇到了同样的问题。
这是Spring
与Jersey
集成的错误吗?如果有,有办法以某种方式修复它吗?
编辑: log4j配置:
# Root logger option
log4j.rootLogger=DEBUG, stdout
log4j.category.org.springframework.data.document.mongodb=DEBUG,stdout
log4j.logger.org.springframework.web.context.ContextLoader=DEBUG,stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
答案 0 :(得分:3)
有一个log4j Appender
属性称为可加性。它被描述为
记录器C的日志语句的输出将转到所有的appender 在C及其祖先。这就是“appender”这个词的含义 加”。
但是,如果记录器C的祖先(比如P)具有可加性标志 设置为false,然后C的输出将定向到所有的appender C和它的祖先,包括P,但不包括任何appenders P的祖先。
因此,记录在org.springframework.web.context.ContextLoader
上的语句也会转到rootLogger
,这是其父级。
您可以通过添加
将其可加性标记设置为false
log4j.additivity.org.springframework.web.context.ContextLoader=false