2010-11-19 5 views
1

Unsere Java WebStart-Anwendung enthält keine log4j-Konfigurationsdatei. es stellt einfach einige hartcodierte Logger und Appender auf.log4j-Konfiguration mit Java Web Start

Ich möchte, dass einzelne Clients in der Lage sind, eine log4j.properties-Datei irgendwo zu löschen und ihre eigene benutzerdefinierte Protokollierung bei der Fehlersuche einzurichten. Ich könnte eine log4j.properties-Datei irgendwo in einem der JARs unserer Anwendung bündeln und das würde Konfiguration erlauben, aber dann wäre die Konfiguration für jeden Client gleich, anstatt nur den Client zu beeinflussen, den ich beheben möchte. Außerdem könnte ich die Einstellungen nicht im laufenden Betrieb ändern.

Gibt es eine Möglichkeit, die log4j initialization procedure zu entführen, um eine pro-Client-Konfigurationsdatei zu verwenden?

Antwort

3

Das grundlegende Problem hierbei ist, dass Java Web Start den Zugriff auf den Computer stark einschränkt.

Sie sollten dies tun können, wenn Sie eine signierte Anwendung ausführen UND der Benutzer Ihnen vollen Zugriff auf den Computer erlaubt. Wenn nicht, können Sie dies nicht mit log4j mit dem Standardmechanismus tun.

Vielleicht möchten Sie Ihren eigenen Konfigurator schreiben, der mit der Java WebStart API aus dem Dateisystem liest und diese dann zu log4j leitet, aber es wird etwas Ellenbogenfett benötigen.

+0

Ich habe vollen Zugriff auf die Maschine. Ich hoffe, ich muss meinen eigenen Konfigurator nicht schreiben, da ich das gerne auf einigen bereits eingerichteten Rechnern machen würde, ohne neuen Code schreiben und upgraden zu müssen. – skiphoppy

+0

Wenn Sie vollen Zugriff auf die Maschine haben, dann - ungetestet - setzen Sie die Systemeigenschaft log4j.configuration in der jnlp-Datei. Siehe http://logging.apache.org/log4j/1.2/manual.html - Abschnitt "Standard-Initialisierungsverfahren" für Details. –

1

Sie können PersistenceService verwenden, um die log4j-Konfiguration auf dem Rechner des lokalen Benutzers zu speichern (funktioniert ohne Signierung), oder mindestens ein Flag speichern, ob eine spezielle Konfiguration geladen werden soll oder nicht beim Start Ihrer Web-Start-Anwendung.

Es gibt auch eine FileOpenService, mit der der Endbenutzer eine lokale Datei log4j.xml öffnen kann, um die Protokollierungsfunktion im laufenden Betrieb neu zu konfigurieren. Auf diese Weise hat der Benutzer die Kontrolle über die Konfiguration und er hat die Kontrolle, wann und wo er es anwenden soll.

Ihr App-Code, der den FileOpenService verwendet, um den Stream zur log4j-Konfigurationsdatei zu leiten, kann dann mithilfe von DOMConfigurator.configure (InputStream) log4j neu konfigurieren.