Last java.util.logging.config.file für Standardinitialisierung
-
03-07-2019 - |
Frage
Ich versuche, eine benutzerdefinierte log.properties
Datei zu laden, wenn meine Anwendung gestartet wird.
Meine Eigenschaften Datei ist im selben Paket wie meine Hauptklasse, so ging ich davon aus, dass die -Djava.util.logging.config.file=log.properties
Befehlszeilenparameter die Eigenschaften geladene Datei erhalten sollen.
Aber die Eigenschaften werden nur dann geladen, wenn ich einen vollständigen absoluten Pfad zur Eigenschaftendatei angeben. Irgendwelche Vorschläge, wie man einen relativen Pfad benutzen?
Lösung
Java-Protokollierung Ihre gesamte Festplatte nach einer Datei nicht suchen; es gibt sehr einfache Regeln, wie Dateien nachgeschlagen. Sie möchten Java, um zu sehen, dass die beiden Dateien zueinander gehören aber du hast nicht so überall sagen. Da Java keine Verbindung zwischen der Eigenschaften-Datei und Ihrer anderen Klasse als sieht, dass sie im selben Ordner auf der Festplatte sind, kann es die Datei nicht finden.
-Djava.util.logging.config.file=log.properties
funktioniert nur, wenn die Datei log.properties
im aktuellen Verzeichnis des Java-Prozesses ist (was ziemlich zufällig sein kann). So sollten Sie einen absoluten Pfad hier verwendet werden.
Eine alternative Lösung wäre, die Datei logging.properties
in $JAVA_HOME/lib/
zu bewegen (oder bearbeiten Sie die Datei, die es sein sollte). In diesem Fall brauchen Sie nicht eine Systemeigenschaft zu setzen.
Andere Tipps
Sie können dynamisch java.util.logging
Eigenschaften von Dateien von einem relativen Pfad sehr leicht laden. Dies ist, was ich in einem static {}
Block in meiner Main
Klasse setzen. Legen Sie Ihre logging.properties
Datei im default package
und Sie darauf zugreifen können sehr leicht mit dem folgenden Code.
final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties");
try
{
LogManager.getLogManager().readConfiguration(inputStream);
}
catch (final IOException e)
{
Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
Logger.getAnonymousLogger().severe(e.getMessage());
}
util Protokollierung von Classpath nicht geladen, braucht es einen absoluten Pfad, weshalb andere Logging-Pakete wie log4j sind viel einfacher zu konfigurieren und besser für Web-Anwendungen, wo es ist ein Schmerz zu bekommen abs Pfade.
Das ist überhaupt in dem java.util.logging.LogManager doco nicht erklärt.