Caricare java.util.logging.config.file per l'inizializzazione predefinita
-
03-07-2019 - |
Domanda
Sto cercando di caricare un file log.properties
personalizzato all'avvio della mia domanda.
Il mio file delle proprietà si trova nello stesso pacchetto della mia classe principale, quindi ho assunto che il parametro della riga di comando -Djava.util.logging.config.file = log.properties
dovrebbe ottenere il file delle proprietà caricato.
Ma le proprietà vengono caricate solo quando specifico un percorso assoluto completo per il file delle proprietà. Qualche suggerimento su come usare un percorso relativo?
Soluzione
La registrazione Java non cerca un file nel tuo intero disco rigido; ci sono regole molto semplici su come cercare i file. Vuoi che Java veda che i due file si appartengono l'uno all'altro, ma non l'hai detto da nessuna parte. Poiché Java non vede alcuna connessione tra il file delle proprietà e la tua classe se non che si trovano nella stessa cartella sul tuo disco, non riesce a trovare il file.
-Djava.util.logging.config.file = log.properties
funziona solo se il file log.properties
si trova nella directory corrente del processo Java (che può essere abbastanza casuale). Quindi dovresti usare un percorso assoluto qui.
Una soluzione alternativa sarebbe quella di spostare il file logging.properties
in $ JAVA_HOME / lib /
(o modificare il file che dovrebbe essere lì). In tal caso, non è necessario impostare una proprietà di sistema.
Altri suggerimenti
Puoi caricare dinamicamente i file delle proprietà java.util.logging
da un percorso relativo molto facilmente. Questo è ciò che ho inserito in un blocco statico {}
nella mia classe Main
. Inserisci il tuo logging.properties
nel pacchetto predefinito
e puoi accedervi facilmente con il seguente codice.
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 logging non si carica da classpath, ha bisogno di un percorso assoluto, motivo per cui altri pacchetti di log come log4j sono molto più facili da configurare e migliori per le app web dove è difficile ottenere percorsi addominali.
questo non è affatto spiegato nel documento java.util.logging.LogManager.