2010-07-28 12 views
7

Jakie informacje systemowe są przydatne - zwłaszcza podczas śledzenia wyjątku lub innych problemów w dół - w aplikacji java?Jak odzyskać przydatne informacje systemowe w java?

myślę o szczegółowe informacje dotyczące wyjątków, Java/informacji OS, zużycia pamięci/obiektów, informacji, środowiska io/enchodings itp

Odpowiedz

0

Dla zastosowań czystych 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") 
+3

Może System.getProperties(). Lista, aby uzyskać wszystkie z nich? –

2

Poza oczywistym - ślad stosu wyjątku - im więcej informacji można uzyskać to lepszy. Więc powinieneś uzyskać wszystkie właściwości systemu, a także zmienne środowiskowe. Także jeśli twoja aplikacja ma jakieś ustawienia, zdobądź wszystkie ich wartości. Oczywiście należy umieścić wszystkie te informacje do pliku dziennika, użyłem System.out ją dla uproszczenia:

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)); 
} 

W większości przypadków będzie to „zbyt dużo” informacji, ale dla większości przypadków będzie ślad stosu dość. Raz dostaniesz trudny problem, będziesz szczęśliwy, że masz wszystko, co „ekstra” informacje

+0

przez Uruchomienie tego kodu otrzymuję wiele linii słów kluczowych i ich wartości. W tym mam wątpliwości w kluczowym dziele 'sun.java.command'. Jaki jest pożytek z tego słowa kluczowego i szukam czegoś, co będzie drukować, Windows Workstation/Session/Blokowanie ekranu i czas odblokowania. –

0

Ponadto dla Java serwletów:

response.getCharacterEncoding() 
request.getSession().getId() 
request.getRemoteHost() 
request.getHeader("User-Agent") 
pageContext.getServletConfig().getServletContext().getServerInfo() 
0

Jedna rzecz, która naprawdę pomaga mi - zobaczyć, skąd biorą się moje zajęcia.

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

uwaga: protectiondomain może być null jako źródło kod może tak zrobić, że potrzebne kontrole zerowe