2012-10-01 22 views
0

從示例應用程序中,他們使用slf4j,並且依賴關係的範圍是運行時。使用slf4j與spring mvc有什麼性能影響?

有沒有這樣的性能影響,或者這是應用程序啓動過程中的一次性打擊?

  <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
      <scope>runtime</scope> 
     </dependency> 

我相信有彈簧和log4j的一些內存泄漏,因爲每當我用的碼頭開發過程中運行我的應用程序,如果重新加載每10秒時,有一個變化,它最終給了我一個OOM錯誤(permgen?)幾個週期後,我被告知這是因爲春季伐木。

評論?

+0

*因爲每當我用的碼頭開發過程中運行我的應用程序,如果重新加載每10秒時,有一個變化*如果您不知道,可以禁用此功能 –

+0

http://wiki.eclipse.org/Jetty/Howto/Prevent_Memory_Leaks - 我們一直致力於在最新版本的jetty中使用這種方法解決許多這類問題如上所述。不要說它會解決你的問題,這就是爲什麼我只是評論......但取決於發生了什麼可能會有所幫助。 –

+0

@mattb什麼可以禁用,重新加載如果每x秒都有一個改變?這就是我想要的...... – loyalflow

回答

0

我不認爲性能影響是顯而易見的,但它取決於您記錄的數量以及爲記錄完成了多少計算。 因此,擁抱記錄與大量的計算if(logger.isDebugEnabled()) {...}

0

春天使用公用日誌記錄,它會最終發送它的輸出到log4j與您當前有配置。

通過添加slf4j,你並沒有改變Spring在內部使用的內容 - 但是你已經爲自己的slf4j記錄器爲log4j添加了另一條記錄日誌消息的路徑。

事實上,這種類型的東西實際上沒有任何影響(除了commons-logging外,使用slf4j,兩者都派發到log4j),因爲slf4j或commons-logging都沒有對它自己做很多工作log4j的前面 - 他們基本上只是把它們的消息發送到log4j上,以便發送給它的appender。

(但一如既往,如果你擔心性能 - 測試和衡量)

+0

儘管運行時的依賴範圍有什麼影響? – loyalflow

+1

Maven pom.xml中的依賴關係的範圍對於應用程序何時運行並不重要。運行時只是意味着庫不在編譯類路徑上,但它與您的war包捆綁在一起。因此,如果範圍是編譯或運行時,「性能影響」並不重要 - 在這兩種情況下,JAR都與WAR捆綁在一起 - 所以所述的問題是毫無意義的。 –

相關問題