代码之家  ›  专栏  ›  技术社区  ›  user32415

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

  •  7
  • user32415  · 技术社区  · 7 年前

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

    5 回复  |  直到 14 年前
        1
  •  2
  •   Sergii Pozharov    16 年前

    除了明显的异常堆栈跟踪之外,您可以获得的信息越多越好。所以你应该得到所有的系统属性和环境变量。另外,如果应用程序有一些设置,则获取它们的所有值。当然你应该把这些信息都放到你的日志文件里,为了简单起见,我用了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));
    }
    

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

        2
  •  1
  •   krock    16 年前

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

        3
  •  0
  •   MRalwasser    16 年前

    对于纯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")
    
        4
  •  0
  •   MRalwasser    16 年前

    response.getCharacterEncoding()
    request.getSession().getId()
    request.getRemoteHost()
    request.getHeader("User-Agent") 
    pageContext.getServletConfig().getServletContext().getServerInfo()
    
        5
  •  0
  •   unmaskableinterrupt    16 年前

    有一件事对我很有帮助-看看我的类是从哪里加载的。

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

    推荐文章