我想更改日誌記錄級別,具體取決於是否在debbugging中,但是我找不到代碼片段來檢查應用程序是否在調試模式下運行。確定java應用程序是否在Eclipse中處於調試模式
我使用eclipse來調試應用程序,所以如果解決方案只能在Eclipse中工作,那就沒問題。
我想更改日誌記錄級別,具體取決於是否在debbugging中,但是我找不到代碼片段來檢查應用程序是否在調試模式下運行。確定java應用程序是否在Eclipse中處於調試模式
我使用eclipse來調試應用程序,所以如果解決方案只能在Eclipse中工作,那就沒問題。
您可以修改調試配置。例如,僅在調試配置中添加一個特殊的VM參數。您可以使用System.getProperties()來讀取提供的參數。
更好的是,修改配置(運行和調試)來加載不同的日誌記錄配置文件。如果您需要編寫代碼來確定日誌記錄級別,這並不好。這應該只是一個配置問題。
如果要設置從您自己的程序調試級別,可能是這行:
public static final boolean DEBUG_MODE = System.getProperty("java.vm.info", "").contains("sharing");
會做的伎倆。
只是測試它在eclipse3.5:
package test;
public class Test
{
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println(System.getProperty("java.vm.info", ""));
}
}
顯示:
mixed mode, sharing
如果要是與調試發射執行而不調試
mixed mode
推出
這是高度依賴系統。
我假設「共享」表示跨VM類共享處於活動狀態。
這是一項非常新的功能,僅在某些平臺上可用。
此外,可能有許多可能的原因來禁用它,所以我不會將它用於調試模式檢測。
(注:我用最新jdk1.6b14測試它在我離開這個作爲CW答案。)
看一看這裏:
http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F
此外,我認爲你可以不知道你的應用程序是否在調試模式下運行。您唯一能做的就是在調試時將參數傳遞給JVM。
Manu
您是否嘗試過在eclipse運行配置中添加vm參數?
喜歡的東西
-Dxxxx=true
,您可以使用Boolean.getProperty("xxxx")
進行檢查。
沒有一個官方認可的方式來可靠地確定,如果任何給定的JVM處於調試模式從JVM本身內,並依託文物只會破壞你的代碼在未來的一段時間。
因此您需要自己介紹一種方法。建議:
上找到how-to-find-out-if-debug-mode-is-enabled
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().
getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
答案如果使用Java Debug Wire Protocol代理這將檢查。
我想有可能是一個屬性,但我從調試啓動和運行啓動(使用Eclipse 3.3,Java的1.6.0_13,Ubuntu的9.04)性質的完全轉儲的測試是相同的。 (我也試過只是你的屬性,包括一個調試運行,我跨過了System.out行,並且運行和調試啓動都給出了'混合模式' – gojomo 2009-07-10 11:46:26
這是高度依賴於系統的,我假設「共享」表示跨VM類共享是主動的,這是一個非常新的特性,只在某些平臺上可用,而且可能有很多可能的原因來禁用它,所以我不會將它用於調試模式檢測。 – 2009-07-10 11:52:37
@Joachim:。好一點(我與最新的JDK 1.6b14在這裏)我會更新我的答案,並把它歸檔爲社區維基 – VonC 2009-07-10 13:30:32