2015-12-16 18 views
5

Ho un piccolo progetto con Spring Boot e Maven, e ora sto cercando di configurare il logback per scrivere su un file. Voglio che scriva su un file dato da ${project.build.directory}/${log.folder}/logfile.log, quindi una sottocartella della directory di build, essendo ${log.folder} una proprietà che ho specificato in un file application.properties, si trova nella mia cartella /resources.logback non trova la proprietà di maven project.build.directory

Questo è il mio logback.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <include resource="org/springframework/boot/logging/logback/base.xml"/> 
    <logger name="org.springframework.boot" level="INFO"/> 
    <logger name="org.springframework.security" level="ERROR"/> 
    <logger name="org.glassfish.jersey" level="DEBUG"/> 

    <property resource="application.properties"/> 

    <appender name="DUMMY_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${project.build.directory}/${log.folder}/logfile.log</file> 
     <encoder> 
      <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS zzz"}, [%thread] %-5level %logger{5} - %msg%n 
      </pattern> 
     </encoder> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${log.folder}/spring.log.%d</fileNamePattern> 
     </rollingPolicy> 
    </appender> 

    <logger name="xxxxxx" level="INFO" additivity="false"> 
     <appender-ref ref="DUMMY_APPENDER"/> 
    </logger> 

    <root level="INFO"> 
     <appender-ref ref="DUMMY_APPENDER"/> 
    </root> 
</configuration> 

Scrive i log, ma il mio problema è che quando faccio funzionare l'applicazione, viene creata una cartella project.build.directory_IS_UNDEFINED, poi mette la mia log.folder sotto esso. Dice in the documentation, che

Come il suo strumento di compilazione, logback si basa su Maven, un diffuso open-source strumento di compilazione.

E quando, nel logback.xml, inizio a digitare $ {pro ... quindi il mio IDE visualizza un set di maven implicit properties disponibile.

Quindi dovrebbe funzionare, ma non è così. Qualche idea del perché?

risposta

2

${project.build.directory} è la proprietà di Maven, che è disponibile solo durante la creazione di Maven. D'altra parte, Logback viene utilizzato su runtime dell'applicazione. Quindi, ovviamente, ${project.build.directory} non è definito in fase di runtime.

È necessario selezionare la posizione che sarà adattata all'ambiente di runtime e alla topologia di distribuzione.

4

Non funziona a causa di ciò che ha detto @luboskmac.

Ecco come farlo funzionare. Ho riprodotto il problema e spinto verso l'alto una soluzione qui: https://github.com/ajorpheus/logback-maven/releases

Ecco una sintesi della correzione: https://github.com/ajorpheus/logback-maven/commit/f245e5a6f4c13f9ba8e161c5452d296b653977d0

  1. definire una proprietà nel pom per tenere la posizione del file di log:

    enter image description here

  2. Utilizzare la proprietà nella logback.xml appender:

enter image description here

  1. abilitare il filtro risorsa Maven modo che qualsiasi proprietà Maven definite nelle risorse in corso di scansione vengono sostituiti con i corrispondenti valori

enter image description here

0

È possibile utilizzare le proprietà del contenitore di distribuzione.

Come per Tomcat

${catalina.base}/logs