Какая информация о системе полезны - особенно при трассировке исключения или других проблем вниз - в JAVA-приложении?
Я думаю о деталях об исключениях, информации о Java/OS, потреблении памяти/объекта, io информация, environment/enchodings и т.д.
Для чистых приложений 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));
}
В большинстве случаев это будет «слишком много» информации, но для большинства случаев трассировки стека будет достаточно. Если у вас возникнет сложная проблема, вы будете счастливы, что у вас есть вся эта «лишняя» информация
Кроме того, для приложений сервлетов Java:
response.getCharacterEncoding()
request.getSession().getId()
request.getRemoteHost()
request.getHeader("User-Agent")
pageContext.getServletConfig().getServletContext().getServerInfo()
Одна вещь, которая действительно помогает мне - увидеть, откуда загружаются мои классы.
obj.getClass (). GetProtectionDomain (). GetCodeSource (). GetLocation ();
примечание: домен защиты может иметь значение null, как и исходный код кода, поэтому выполните необходимые проверки на null
Посмотрите Javadoc для System.getProperties()
который документирует свойства, которые гарантированно существуют в каждой JVM.