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 № 1MODIFICA: l'applicazione tenta di trovare i file delle proprietà in fase di runtime.
Sta funzionando nel mio caso
Per il valore delle proprietà di accesso. Crea oggetto ResourceBundle. Ex.:
private final ResourceBundle objRbLdap = ResourceBundle.getBundle("prperties file name");