web-dev-qa-db-ja.com

logback.xmlに、絶対パスなしでclasspath:を介してファイルログの宛先を指定する方法はありますか?

私のlogback.xml構成ファイルには、このアペンダーがあります。

<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>

クラスパスを介して相対的な方法でログを印刷するファイルへのパスを指定しますが、機能しません。ファイルaddressbookLog.logが作成および書き込まれません。 /home/andrea/.../resources/addressbookLog.logのような絶対パスでのみ動作します。クラスパスで動作させる方法についてのアイデアはありますか?

18
andPat

第3章:ログバック構成:変数置換 は、外部で定義された変数を参照するさまざまな方法を示しました。 system propertiesおよびclasspath

重要な構成は、すべての変数を含む別のファイルを作成することです。ファイルの代わりに、クラスパス上のリソースへの参照を作成することもできます。例えば.

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>

外部プロパティファイル(resource1.properties)

USER_HOME=/path/to/somewhere

resource1.propertiesは、classpathで利用可能なリソースです。

第3章:ログバック構成:変数置換 でフルバージョンを参照できます。これがお役に立てば幸いです。

23
Charlee Chitsuk

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

0
ratelgogo