我想根据我是否在调试来更改日志级别,但是我找不到一个代码片段来检查应用程序是否在调试模式下运行。我使用Eclipse来调试应用程序,所以如果解决方案只在Eclipse中工作就可以了。
h9a6wy2h1#
在how-to-find-out-if-debug-mode-is-enabled上找到答案
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean(). getInputArguments().toString().contains("-agentlib:jdwp");
这将检查是否使用了Java Debug Wire Protocol代理。
ffscu2ro2#
可以修改调试配置。例如,仅在调试配置中添加特殊VM参数。可以使用System.getProperties()读取提供的参数。更好的是,修改配置(Run和Debug)以加载不同的日志配置文件。如果您需要编写代码来确定日志级别,这是不好的。这应该只是一个配置问题。
System.getProperties()
30byixjq3#
没有一种官方认可的方法可以从JVM本身内部可靠地确定任何给定的JVM是否处于调试模式,依赖工件只会在将来的某个时候破坏代码。因此,您需要自己介绍一种方法。
7kjnsjlb4#
您是否尝试过在eclipse运行配置中添加一个vm参数?将其作为VM参数传递
-Ddebug=true
然后你可以用Boolean.getBoolean("debug")来检查这个。
Boolean.getBoolean("debug")
nbewdwxp5#
如果您从自己的程序设置调试级别,则可能是类似以下的行:
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
如果使用调试启动程序执行Joachim Sauer评论:这高度依赖于系统。我假设“共享”表示跨VM类共享处于活动状态。这是一项非常新的功能,仅在某些平台上可用。此外,启用或禁用它可能有很多原因,所以我不会将其用于调试模式检测。(Note:我用最新的JDK1. 6 B14测试过了。我把这个作为CW答案留下。)
1yjd4xko6#
看看这里:http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F此外,我认为你无法知道你的应用是否在调试模式下运行,你唯一能做的就是在调试时向JVM传递一个参数。马努
o4hqfura7#
如果使用套接字(例如9999),您可以调用netstat来检查连接是否已建立:
Process p = new ProcessBuilder("netstat", "-n").start(); String stdout = IOUtils.toString(p.getInputStream(), Charset.defaultCharset());
然后在标准输出中扫描127.0.0.1:9999。* 已建立
7条答案
按热度按时间h9a6wy2h1#
在how-to-find-out-if-debug-mode-is-enabled上找到答案
这将检查是否使用了Java Debug Wire Protocol代理。
ffscu2ro2#
可以修改调试配置。例如,仅在调试配置中添加特殊VM参数。可以使用
System.getProperties()
读取提供的参数。更好的是,修改配置(Run和Debug)以加载不同的日志配置文件。如果您需要编写代码来确定日志级别,这是不好的。这应该只是一个配置问题。
30byixjq3#
没有一种官方认可的方法可以从JVM本身内部可靠地确定任何给定的JVM是否处于调试模式,依赖工件只会在将来的某个时候破坏代码。
因此,您需要自己介绍一种方法。
7kjnsjlb4#
您是否尝试过在eclipse运行配置中添加一个vm参数?
将其作为VM参数传递
然后你可以用
Boolean.getBoolean("debug")
来检查这个。nbewdwxp5#
如果您从自己的程序设置调试级别,则可能是类似以下的行:
就可以了。
刚刚在eclipse3.5中测试过:
将显示:
如果启动时没有调试
如果使用调试启动程序执行
Joachim Sauer评论:
这高度依赖于系统。
我假设“共享”表示跨VM类共享处于活动状态。
这是一项非常新的功能,仅在某些平台上可用。
此外,启用或禁用它可能有很多原因,所以我不会将其用于调试模式检测。
(Note:我用最新的JDK1. 6 B14测试过了。我把这个作为CW答案留下。)
1yjd4xko6#
看看这里:
http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F
此外,我认为你无法知道你的应用是否在调试模式下运行,你唯一能做的就是在调试时向JVM传递一个参数。
马努
o4hqfura7#
如果使用套接字(例如9999),您可以调用netstat来检查连接是否已建立:
然后在标准输出中扫描127.0.0.1:9999。* 已建立