如何在java中检索有用的系统信息?

时间:2010-07-28 12:58:51

标签: exception java system-properties system-information

哪些系统信息很有用 - 特别是在跟踪异常或其他问题时 - 在java应用程序中?

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

5 个答案:

答案 0 :(得分: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));
}

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

答案 1 :(得分:1)

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

答案 2 :(得分: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 :(得分:0)

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

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

答案 4 :(得分:0)

有一件事真的有助于我 - 看看我的课程从何处加载。

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

注意:protectdomain可以为null,因为可以编码源代码,因此需要进行空检查