2012-09-28 44 views
0

我們正在使用Spring MVC 3作爲我們的WebApplication。我從應用程序中看到一個奇怪的行爲。當用戶執行一個動作(例如:按鈕點擊)時,我看到控制器日誌記錄了兩次,控制器中的後續調用也是如此。我們使用的控制器是默認的singleton。 所以,Spring MVC WebApp問題

  1. 我想打印控制器中的線程信息(如threadName。試過Thread.getName()..是獨一無二的)..任何幫助嗎?

  2. 我如何確保只加載了一個彈簧容器 ? - 有什麼建議麼?

log4j的道具:

`log4j.appender.ROLL_FILE=org.apache.log4j.RollingFileAppender 
    log4j.appender.ROLL_FILE.File=/ws/was/dept/logs/${module.jvm.instance}_module.log 
    log4j.appender.ROLLING_FILE.Append=true 
    log4j.additivity.ROLLING_FILE.Append=false 
    log4j.appender.ROLLING_FILE.MaxFileSize=10MB 
    log4j.appender.ROLLING_FILE.MaxBackupIndex=20 
    log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
    log4j.appender.ROLLING_FILE.layout.ConversionPattern=[module] %d - %c -%-4r [%t] %-5p %c %x - %m 

web.xml中:

<display-name>module</display-name> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath*:/spring/int/root-int-context.xml,/WEB-INF/spring/root- context.xml</param-value> 
    </context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
     <servlet> 
    <servlet-name>appServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/appServlet.xml</param-value> 
     </init-param>   
    <load-on-startup>1</load-on-startup> 
    </servlet>` 
    <servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
.......... 
......... 
......... 

感謝

+1

您使用的是日誌庫嗎? – ElderMael

+1

更可能是記錄框架問題記錄兩次相同的消息。你使用Logback還是Log4J?你能分享你的配置嗎?在控制器中放置一個斷點,我敢打賭它只會被擊中一次。 –

回答

1
  1. 使用Thread.getId()獲取唯一的線程ID。
  2. 檢查你的記錄器配置 - 我猜你正在使用log4jslfj - 你可能有多個截取消息的記錄器將appender添加到父記錄器中定義的appender的頂部,這可能會導致兩條消息打印 - 所以檢查你是否有這個,並定義additivity是錯誤的。
0

我想打印控制器中的線程信息(如threadName嘗試。 Thread.getName()..是唯一的)

  • 使用日誌框架。你可以找到幾個例子。檢查here配置logback

我如何確保只有一個Spring容器加載?

  • 我真的不明白你的意思在這裏是什麼,但如果已經在web.xml適當定義contextConfigLocation的,Spring容器將被正確地加載

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
        classpath*:/META-INF/spring/*.xml 
    </param-value> 
    

+0

用log4j和web.xml更新了這個問題。 – user874722