21

I've in my logback.xml configuration file this appender:

<appender name="FILE"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>classpath:addressbookLog.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <Pattern>%d{dd MMM yyyy;HH:mm:ss} %-5level %logger{36} - %msg%n
      </Pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <FileNamePattern>classpath:addressbookLog.%i.log.zip</FileNamePattern>
      <MinIndex>1</MinIndex>
      <MaxIndex>10</MaxIndex>
    </rollingPolicy>

    <triggeringPolicy
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <MaxFileSize>2MB</MaxFileSize>
    </triggeringPolicy>
  </appender>

so that I specify path to file in which to print logs in a relative way through classpath, but it doesn't work, no file addressbookLog.log is created and written. It only works with absolute paths like /home/andrea/.../resources/addressbookLog.log Have you any ideas on how to make it work with classpath?

andPat
  • 4,153
  • 7
  • 24
  • 36

2 Answers2

28

The Chapter 3: Logback configuration: Variable substitution told us the various ways to refer to the variable defined outside, e.g. system properties and classpath.

The significant configuration is creating a separate file that will contain all the variables. We can make a reference to a resource on the class path instead of a file as well. e.g.

The logback.xml

<configuration>

  <property resource="resource1.properties" />

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
     <!-- Here we can refer to the variable 
      defined at the resource1.properties -->
     <file>${USER_HOME}/myApp.log</file>
     <encoder>
       <pattern>%msg%n</pattern>
     </encoder>
   </appender>

   <root level="debug">
     <appender-ref ref="FILE" />
   </root>
</configuration>

The external properties file (resource1.properties)

USER_HOME=/path/to/somewhere

Please note that the resource1.properties is a resource which available at the classpath.

You may refer to the full version at Chapter 3: Logback configuration: Variable substitution. I hope this may help.

Community
  • 1
  • 1
Charlee Chitsuk
  • 8,847
  • 2
  • 56
  • 71
  • 22
    That's not really what he is asking. He wants to know how to use the classpath to specify where the destination log file is. For example, the log file in his example would be "WEB-INF/classes/addressbookLog.log" under Tomcat. But it could be in a different location in a different environment. I'm looking for the answer to the same question... – James Sumners Jul 03 '13 at 17:45
1

<FileNamePattern>${user.dir}/logs/addressbookLog.%i.log.zip</FileNamePattern>

ratelgogo
  • 11
  • 2