/ / log4j non sta caricando proprietà personalizzate config - java, logging, path, log4j, config

log4j non carica proprietà personalizzate config - java, logging, path, log4j, config

Sto cercando di avviare un'applicazione java dalla riga di comando con la speranza che riprenda i file di configurazione di log4j in una cartella diversa. Ecco la mia struttura di cartelle:

  • /app -> cartella base app

  • /app/config -> memorizza i file di configurazione personalizzati incluso log4j

  • /app/lib -> memorizza tutti i barattoli

Tuttavia quando provo a eseguire il programma da /app per qualche ragione log4j non sta inizializzando correttamente:

-bash-4.2# pwd
/app
-bash-4.2# java -cp config:lib/* -Xmx1024M className
log4j:WARN No appenders could be found for logger(org.springframework.beans.factory.xml.XmlBeanDefinitionReader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Sorprendentemente, se sposto la cartella di configurazione in /lib, quindi prova ad avviare il programma java da lì, sembra che tutto funzioni:

(struttura delle cartelle aggiornata):

  • /app -> cartella base app

  • /app/lib -> memorizza tutti i barattoli

  • /app/lib/config -> memorizza i file di configurazione personalizzati incluso log4j

Produzione:

-bash-4.2# pwd
/app/lib
-bash-4.2# java -cp config:* -Xmx1024M className
<Expected log message now shows up>

Nel mio codice ho usato PropertyConfigurator per caricare il file di configurazione:

PropertyConfigurator.configureAndWatch(loggingConfigFile)

Dove logProperties è definito come

val loggingConfigFile = "config/custom.logging.properties"

Inizialmente pensavo che il problema con il primo scenario fosse con un qualche tipo di problema di pathing, comunque durante la stampa System.getProperty("user.dir") durante il tempo di esecuzione sembra che il programma fosse effettivamente in esecuzione /app e che dovrebbe essere in grado di caricare il file di configurazione dal percorso definito (ad es. /app/config/custom.logging.properties). C'è qualcosa di sbagliato nella configurazione?

risposte:

1 per risposta № 1

MODIFICA: l'applicazione tenta di trovare i file delle proprietà in fase di runtime.

Sta funzionando nel mio caso

inserisci la descrizione dell'immagine qui

Per il valore delle proprietà di accesso. Crea oggetto ResourceBundle. Ex.:

private final ResourceBundle objRbLdap = ResourceBundle.getBundle("prperties file name");