2014-04-17 85 views
2

如何基於leiningen測試元數據使用不同的log4j屬性文件?我有調試日誌輸出到文件的功能。通常情況下,有很多數據被寫入該調試日誌文件,從而減慢了功能。正常運行的應用程序不會有調試文件寫入,所以我想基準沒有文件寫入功能的正常運行。對於基準測試,我使用的是標準。假設用於基準deftest定義的元數據是:benchmark基於leiningen測試元數據的log4j屬性文件?

回答

2

基於測試元數據執行此操作的麻煩在於,所有測試都在單個JVM實例中運行,並且在JVM中即時修改Log4j配置並非易事。相反,我會在project.clj中設置配置文件以默認禁用:benchmark測試,併爲運行基準設置單獨的配置文件。假設您的:resource-paths設置爲包含調試級別log4j.properties文件,那麼您的基準配置文件可以根據需要設置類路徑或系統配置文件以使用不同的文件。例如:

(defproject myproject 
    ... 
    :test-selectors {:default (complement :benchmark)} 
    :profiles { 
    :benchmark { 
     :test-selectors {:default :benchmark} 
     :jvm-opts ["-Dlog4j.configuration=log4j-benchmark.properties"] 
    } 
    }) 

然後,您可以運行與基準:

> lein with-profile +benchmark test 
+0

嗯。我已經在資源/共享文件夾中設置了log4j.properties文件。我將如何將它與你的建議相結合? ':resource-paths [「resources/shared」]'在兩種情況下移動到jvm-opts?或者創建一個可以覆蓋的資源/基準文件夾?如果文件夾策略起作用,我認爲這將是最好的,因爲它可以應用於除log4j.properties之外的其他內容。你怎麼看? – user1559027

+0

在默認情況下,您並不嚴格需要使用jvm-opts來使用log4j.properties,儘管它不會受到傷害。創建一個單獨的資源/基準文件夾可以很好地工作,只要它放在默認資源之前/在有效類路徑上共享即可。 – Alex