2015-02-05 11 views
9

Log4j2 funziona correttamente con Spring Boot tramite il file di configurazione log4j2.xml nel classpath root, esattamente come afferma la documentazione.Come posso cambiare il percorso predefinito di log4j2.xml in Java Spring Boot?

Quando si tenta di spostare il file in una posizione diversa, però, io non sono in grado di passare alla nuova posizione alla primavera all'avvio. Da the documentation:

I vari sistemi di registrazione possono essere attivati ​​includendo le librerie appropriate sul percorso di classe e ulteriormente personalizzati da fornendo un file configurazione adatta nella radice del classpath, o in una posizione specificata dalla proprietà Spring Environment logging.config.

ho provato a fissare la nuova posizione con una proprietà di sistema Java

java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar 

o utilizzando un esterno application.properties contenente la proprietà in questione

logging.config=classpath:/config/log4j2.xml 

ma sono regolarmente accolti dal seguente messaggio di errore .

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
+0

Potresti confermare se '/ config' è nel classpath?se stai usando un progetto basato su maven, metti il ​​file xml sotto 'src/main/resources' – Mithun

+0

La cartella' config' (pacchetto) si trova nel classpath, e contiene già 'application.yml', che è stato prelevato correttamente e usato con successo nell'applicazione. – micpalmia

+0

Potresti inserire il file xml in 'src/main/resources' e provare a restringere il problema? – Mithun

risposta

14

Come specificato nel Spring reference documentation, la proprietà logging.config non può essere impostato tra le proprietà di applicazione, come sono letti dopo che la registrazione è già stato inizializzato.

La soluzione è quello di fornire il percorso della configurazione di registrazione esterno questo modo:

java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar 
1

La risposta di micpalmia è assolutamente corretto.

avevo bisogno di mettere la configurazione al di fuori del percorso di classe non volevo passare il file di configurazione come parametro. Così ho messo una configurazione di registrazione molto semplice nelle risorse classpath e ha avuto l'riconfigurare applicazione di avvio di primavera la registrazione all'avvio, in questo modo:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... param) throws UnsupportedEncodingException { 
     Configurator.initialize(null, "config/log4j2.xml"); 
     // ... 
    } 
} 

Questo approccio ha uno svantaggio significativo: L'intero processo di avvio applicazione non sarà registrata come configurato esternamente. Ma una volta eseguito il codice personalizzato, il logger funziona come previsto. Mentre non puoi, trovo che questo sia un compromesso con cui posso convivere.

1

Ho lo stesso problema nel mio progetto, oltre log4j2.xml ho anche bisogno di altri file di configurazione nel percorso di classe. Ecco il mio 2 soluzioni che funziona:

soluation 1: Avviare applicazione di avvio primavera con org.springframework.boot.loader.JarLauncher

java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher 

Soluzione 2: Scrivere una voce di percorso di classe './config' nel MANIFEST.MF nel barattolo

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifestEntries> 
       <Class-Path>./config/</Class-Path> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.5.3.RELEASE</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
Problemi correlati