Как получить полезную системную информацию в Java? - PullRequest
7 голосов
/ 28 июля 2010

Какая системная информация полезна - особенно при отслеживании исключения или других проблем - в java-приложении?

Я думаю о деталях об исключениях, информации java / os, потреблении памяти / объекта, информации ioокружающая среда / кодирование и т. д.

Ответы [ 5 ]

2 голосов
/ 28 июля 2010

Помимо очевидного - трассировка стека исключений - чем больше информации вы получите, тем лучше.Таким образом, вы должны получить все системные свойства, а также переменные среды.Также, если ваше приложение имеет некоторые настройки, получите все их значения.Конечно, вы должны поместить всю эту информацию в ваш файл журнала, я использовал 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 голос
/ 28 июля 2010

Проверьте Javadoc для System.getProperties(), который документирует свойства, которые гарантированно существуют в каждой JVM.

0 голосов
/ 29 июля 2010

Одна вещь, которая действительно помогает мне - видеть, откуда загружаются мои классы.

obj.getClass (). GetProtectionDomain (). GetCodeSource (). GetLocation ();

Примечание.

0 голосов
/ 28 июля 2010

Кроме того, для приложений Java-сервлетов:

response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo()
0 голосов
/ 28 июля 2010

Для приложений 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")
...