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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top