Как получить полезную системную информацию в Java?

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

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

5 ответов

Решение

Для чистых 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")

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

В большинстве случаев это будет "слишком много" информации, но для большинства случаев будет достаточно трассировки стека. Как только вы получите сложную проблему, вы будете рады, что у вас есть вся эта "дополнительная" информация

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

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

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

примечание: домен защиты может быть нулевым, как и исходный код, поэтому выполните необходимые проверки на нулевое

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

response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo()
Другие вопросы по тегам