7

哪些系统信息是有用的——尤其是在跟踪异常或其他问题时——在 java 应用程序中?

我正在考虑有关异常、java/os 信息、内存/对象消耗、io 信息、环境/编码等的详细信息。

4

5 回答 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));
}

对于大多数情况,这将是“太多”信息,但对于大多数情况,堆栈跟踪就足够了。一旦遇到棘手的问题,您会很高兴拥有所有“额外”信息

于 2010-07-28T13:09:51.793 回答
1

查看Javadoc,System.getProperties()其中记录了保证存在于每个 JVM 中的属性。

于 2010-07-28T13:20:23.150 回答
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")
于 2010-07-28T13:10:30.357 回答
0

此外,对于 java servlet 应用程序:

response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo()
于 2010-07-28T13:10:46.283 回答
0

真正帮助我的一件事 - 看看我的课程是从哪里加载的。

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

注意: protectiondomain 可以为空,代码源也可以为空,因此需要进行空检查

于 2010-07-29T00:32:09.917 回答