![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Neuer Benutzer
Registriert seit: 15.07.2005
Beiträge: 6
|
Hi,
ich hab da mal ein kleines Problem. Ich würde gerne in einer Tomcatanwendung nicht behandelte Exceptions loggen. In C# gibt es die Möglichkeit einen eigenen Handler anzumelden, der dann ( so soll es in meinem Fall sein ) die Exceptions in einer Datenbank loggt. Für Java habe ich folgendes Snippet gefunden: Code:
public static void main(String[] args) {
// Tell AWT to invoke my Handler.
System.setProperty("sun.awt.exception.handler", "ErrorHandler");
[...]
}
[...]
class ErrorHandler extends java.lang.Object {
/**
* Default constructor must exist (I know it's the default; this is here in
* case somebody adds any other constructor).
*/
public ErrorHandler() {
System.out.println("CONSTRUCTED");
}
public void handle(Throwable t) {
System.err.println("Hey, I caught it!");
System.err.println(t.toString());
}
}
MfG Siron |
|
|
|
|
|
Nach oben #2 |
|
Benutzer
Registriert seit: 15.11.2005
Beiträge: 75
|
Neu mit Java 5 ist
Code:
java.lang.Thread.setUncaughtExceptionHandler( java.lang.Thread.UncaughtExceptioHandler ec); |
|
|
|
|
|
Nach oben #3 |
|
Benutzer
Registriert seit: 15.11.2005
Beiträge: 75
|
Ergänzung: es gibt in java.lang.Thread auch noch eine statische Methode (setDefaultUncaughtExceptionHandler), mit der man das nur einmal für alle Threads machen muss (zumindest theoretisch; ausprobiert habe ich das noch nicht).
|
|
|
|
|
|
Nach oben #4 |
|
Neuer Benutzer
Registriert seit: 15.07.2005
Beiträge: 6
|
Hey danke,
es funktioniert. Ich hab mal ein kleines Beispiel geschrieben. Da kann man auch sehen, dass wenn man die statische Methode benutzt, für alle der gleiche Handler gilt. Code:
public class ExceptionHandlingTest {
public ExceptionHandlingTest() {
MyThread threadA, threadB;
// hier wird der Handler für alle Threads gesetzt
Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
// Thread starten
threadA = new MyThread();
threadB = new MyThread();
threadA.start();
threadB.start();
}
// auf gehts
public static void main(String[] args) {
new ExceptionHandlingTest();
}
// Thread der die unbehandelte Exception wirft
private class MyThread extends Thread{
public void run(){
int count = 0;
int[] area = { 1,2,3,4,5,6,7,8,9,10 };
while ( true )
System.out.println ( area[count++] );
}
}
// mein Handler
private class MyExceptionHandler implements UncaughtExceptionHandler{
// wird ausgelöst wenn eine nicht behandelte Exception auftritt
public void uncaughtException( Thread thrd, Throwable excp){
JOptionPane.showMessageDialog( new JFrame(),
exceptionToString ( excp ),
"Fehler",
JOptionPane.ERROR_MESSAGE );
}
// der Infoblock der angezeigt wird
private String exceptionToString( Throwable t ){
StackTraceElement[] trace;
String message;
message = "Exception: " + t.getClass().getName() + EOL;
message += "Info: " + t.getMessage() + EOL;
message += "Trace: ";
trace = t.getStackTrace();
for ( int i = 0; i < trace.length; i++ ){
message += trace[i].getClassName() + "." +
trace[i].getMethodName() + ":" +
trace[i].getLineNumber() + EOL;
}
return message;
}
private final String EOL = "\r\n";
}
}
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|