2011-06-29 68 views
4

在閱讀本文之前,您應該知道我是未知Java領域的python開發人員。設置登錄java的屬性

我正在嘗試爲Java設置日誌記錄。當我設置logging.properties時,我能夠使它工作。就像這樣:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.config.file= /path/to/logging/file/logging.properties -jar start.jar 

logging.properties文件簽入版本控制,在我的當前設置是在所有的環境中使用,所以我不想硬編碼在logging.properties的logging.FileHandler.pattern文件。所以,我試圖將其移至命令行,這樣做:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.config.file= /path/to/logging/file/logging.properties -Djava.util.logging.FileHandler.pattern=/var/log/project_name/solr/solr.log -jar start.jar 

但似乎FileHandler.pattern無法識別,所以該文件沒有寫。所以,我想,呃,我們只是拋棄logging.properties文件並嘗試在命令行上拋出所有內容。所以,然後我試了一下:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.Handler=java.util.logging.FileHandler -D.level=WARNING -Djava.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter -Djava.util.logging.FileHandler.pattern=/var/log/project_name/solr/solr.log -jar start.jar 

但是那也行不通。所以,我在尋求幫助。

三個問題:

  1. 我爲什麼沒有提供工作的第二個例子嗎?
  2. 爲什麼我沒有提供第三個例子?
  3. 由於logging.properties文件被檢入到版本控制並且是一個共享文件,所以正確的方法是什麼?最佳做法是什麼?

在回覆時,請給我們使用小詞語Java新手。 :-)

回答

2

-Dxyz.blahbla.bla=foobar是一個系統屬性,而不是一切都可以作爲一個系統屬性,因爲會有一些代碼這將要求提供財產,即使你可以把任何你想要的,沒有人會閱讀它。

例如,試試這個代碼:

class HelloSystemProperty { 
    public static void main(String ... args) { 
     System.out.println(System.getProperty("getIt")); 
     } 
} 

,然後運行它想:

java -DgetIt=Yeah HelloSystemProperty 

所以,你可能已經猜到了,你不能只是去把任何變作爲一個系統屬性,除非你讀了你的自我,並相應地處理它。

因此,如果您確實需要手動修改日誌記錄級別作爲系統屬性,您可能需要add code to read that property and set the values,但這可能太多了,我不確定是否要去那裏。

因此,使用該文件應該是足夠

我希望這有助於。

1

「對FileHandler模​​式進行硬編碼」可能不是一件壞事,因爲該模式可以包含在運行時被替換的令牌。我知道%t被VM認爲是系統臨時目錄(如/ var/tmp或C:\\ TEMP)所取代,%h是用戶的主目錄(或者說「用戶」。家」系統屬性),並有一些更多的,但我不知道他們。

如果你使用一些這些的,圖案可能是足夠通用的,你不必擔心試圖超一般化它以便於攜帶。