2017-06-21 5 views
0

Ich habe eine RCP-Anwendung, für die ich alle Stacktraces erfassen möchte. Ich verwende derzeit slf4j für mein Logging-Mechanismus. Wenn ich zum Beispiel meine RCP-Anwendung in Eclipse ausführe, kann ich das Konsolenfenster betrachten und alle Stacktraces sehen, die nicht explizit vom Code erfasst wurden. Wenn ich die Anwendung exportiere und sie außerhalb von Eclipse laufe, sehe ich diese Stacktraces nicht. Ich möchte den Code nicht mühsam ändern, um try/catch-Blöcke zu verwenden (weil es eine Menge Code gibt). Ich würde eher auf den Mechanismus tippen, den Eclipse benutzt, um das Gleiche zu tun (Es setzt try/catch nicht in meinen Code, aber er meldet es in der Konsole). Gibt es eine einfache Möglichkeit, was Eclipse in meinem RCP-Code macht, so dass es, wenn ich es von außerhalb der Eclipse aus führe, in meinen Log-Dateien auftaucht?Java - Catch alle Stacktraces

+0

Wenn Sie Ihr RCP in Eclipse ausführen, wird eine neue JVM gestartet, um es auszuführen. Die Eclipse-Konsole zeigt nur alles an, was die neue JVM ausgibt. Das ist also nichts, was du außerhalb von Eclipse verwenden kannst. [Diese Frage] (https://stackoverflow.com/q/29900137/2670892) erwähnt einige Methoden, die Sie ausprobieren könnten. –

+0

Vielleicht fehlt mir etwas, aber dieser Link zeigt einen RCP 3x Weg und einen internen Paket Weg. Keine wäre eine verfügbare Lösung. Habe ich einen anderen Weg verpasst? – ekjcfn3902039

+0

Obwohl IEventLoopAdvisor eine interne Klasse ist, scheint es die beste Möglichkeit zu sein, unbehandelte Ausnahmen in e4 zu erfassen. Einige e4-APIs werden immer noch als intern eingestuft, da das Design noch nicht vollständig finalisiert ist. Es ist unwahrscheinlich, dass sie sich signifikant verändern werden (sicherlich OK in Eclipse Oxygen, veröffentlicht in diesem Monat). –

Antwort

0

Ich bin nicht vertraut mit dem RCP-Framework; Normalerweise können Sie jedoch einen Thread-Gruppen--Handler für nicht abgefangene Ausnahmen einrichten.

Mit anderen Worten: Sie können eine Komponente definieren, die für jede nicht abgefangene Ausnahme ausgelöst wird. Und diese Komponente könnte einfach eingehende Ausnahmen protokollieren.

Für einen Beispielcode siehe here.

Verwandte Themen