如何在Java中获取有用的系统信息?

7

在追踪Java应用程序的异常或其他问题时,哪些系统信息是有用的?

我想到了异常的详细信息、Java/操作系统信息、内存/对象消耗、IO信息、环境/编码等。

5个回答

2

除了明显的异常堆栈跟踪之外,能够获取到更多信息是更好的。因此,您应该获取所有系统属性以及环境变量。另外,如果您的应用程序有一些设置,请获取它们的所有值。当然,您应该将所有这些信息记录在日志文件中,我在这里使用System.out简单地实现:

System.out.println("----Java System Properties----");       
System.getProperties().list(System.out);

System.out.println("----System Environment Variables----");
Map<String, String> env = System.getenv();
Set<String> keys = env.keySet();
for (String key : keys) {
    System.out.println(key + "=" + env.get(key));
}

对于大多数情况来说,这将是“过多”的信息,但对于大多数情况来说,堆栈跟踪足够了。一旦你遇到难题,你会很高兴拥有所有这些“额外”的信息。


通过运行这段代码,我得到了许多关键字及其值的输出。在其中,我对关键字sun.java.command有疑问。这个关键字的用途是什么?我正在寻找一个能够打印Windows工作站/会话/屏幕锁定和解锁时间的方法。 - Sathish Kumar k k

1

0

对于纯Java应用程序:

System.getProperty("org.xml.sax.driver") 
System.getProperty("java.version")
System.getProperty("java.vm.version")
System.getProperty("os.name")
System.getProperty("os.version")
System.getProperty("os.arch")

3
尝试使用System.getProperties().list获取所有属性? - Sergii Pozharov

0

另外,针对Java Servlet应用程序:

response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo()

0

有一件事情真正帮助我 - 看到我的类是从哪里加载的。

obj.getClass().getProtectionDomain().getCodeSource().getLocation();

注意:ProtectionDomain和CodeSource都可能为空,因此需要进行必要的空值检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接