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

Exception 如何在java中检索有用的系统信息?,exception,java,system-properties,system-information,Exception,Java,System Properties,System Information,在java应用程序中,哪些系统信息是有用的,尤其是在跟踪异常或其他问题时 我正在考虑有关异常、java/os信息、内存/对象消耗、io信息、环境/加密等的详细信息。除了明显的异常堆栈跟踪之外,您可以获得的信息越多越好。因此,您应该获得所有系统属性以及环境变量。此外,如果应用程序有一些设置,请获取它们的所有值。当然,您应该将所有这些信息放入日志文件中,为了简单起见,我使用了System.out: System.out.println("----Java System Properties----"

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


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

除了明显的异常堆栈跟踪之外,您可以获得的信息越多越好。因此,您应该获得所有系统属性以及环境变量。此外,如果应用程序有一些设置,请获取它们的所有值。当然,您应该将所有这些信息放入日志文件中,为了简单起见,我使用了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));
}
System.out.println(“----Java系统属性----”;
System.getProperties().list(System.out);
System.out.println(“----系统环境变量----”;
Map env=System.getenv();
Set keys=env.keySet();
用于(字符串键:键){
System.out.println(key+“=”+env.get(key));
}

对于大多数情况,这将是“太多”的信息,但对于大多数情况,堆栈跟踪就足够了。一旦遇到棘手的问题,您会很高兴拥有纯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")
response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo()

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

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")
response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo()

请查看文档,其中包含保证存在于每个JVM中的属性。

有一件事真正帮助了我,那就是查看我的类从何处加载

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


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

System.getProperties().list以获取所有这些值?通过运行此代码,我可以获得许多行关键字及其值。在这方面,我对关键工作
sun.java.command
表示怀疑。这个关键词有什么用?我正在寻找打印、windows工作站/会话/屏幕锁定和解锁时间的东西。