我想更改日志记录级别,具体取决于是否在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