2013-10-31 59 views
2

快速的問題,通過CLI參數設置日誌級別? Java的

翻翻這些實例靜態分配程序

http://www.onjava.com/pub/a/onjava/2002/06/19/log.html?page=2

http://www.vogella.com/articles/Logging/article.html

我如何動態地通過參數設置日誌記錄級別的日誌記錄級別時,我致電我的Java應用程序

eg

Java的罐子myprogram.jar FINE

含義是,除了這個代碼

logger.setLevel(Level.INFO); 

我能有這樣的事情

logger.setLevel(args[0]); 

研究時有犯規的文檔似乎不能用字符串設置日誌級別。

http://docs.oracle.com/javase/6/docs/api/java/util/logging/Level.html

回答

2

您可以使用內置的方法Level.parse(String),它解析級別名稱字符串變成Level

參數字符串可能包含級別名稱或整數 值。

例如:

  • 「嚴重」
  • 「INFO」
  • 「1000」
+0

爲此需要小心用戶輸入,但是謝謝:) – kaleeway

+0

@serupticious無論您如何實現它,用戶輸入驗證都是強制性的。順便說一下,使用這個函數,當你使用沒有映射到已知'Level'的整數時,你會得到新的關卡。您可能可以使用這個優勢。 –

1

您可以創建一個映射字符串和水平,並參閱:

logger.setLevel(logmap.get(args[0])); 
1

Level類是參考:

public static final Level INFO = new Level("INFO", 800, defaultBundle); 

你可以從你的字符串映射像"INFO"到某些常數像Level.INFO等等......

1

您可以使用map存儲Level映射:

Map<String, Level> levelmap = new HashMap<String, Level>(); 
levelmap.put("info", Level.INFO); 

,然後用這個圖來設置日誌級別:

org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger(); 
String level = arg[0]; 
rootLogger.setLevel(levelmap.get(level)); 
+0

像他使用的Log4j它不看。 –