Spring Bootでlogback.xmlを使用してログローテートする(Tomcat)

Spring Bootでlogback.xmlを使用してログローテートする(Tomcat)

Spring Bootのapplication.ymlで簡易なlog出力の設定が出来ますが、logback.xmlにログ出力情報を記載すればtomcatのwarアプリでログ出力やログローテート、環境ごとに出力内容を設定することが出来ます。

logback.xml → logback-spring.xml

Springではlogback.xmlではなく、logback-spring.xmlにするのが推奨されているようです。

Spring Boot 1.3 Release Notes
Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

配置場所

src/main/resources/配下にlogback-spring.xmlを配置します。

logback-spring.xmlで日単位でログローテート

logback-spring.xmlで日単位でログローテートします。

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
  <timestamp key="LOG_DATE" datePattern="yyyyMMdd"/>
  <property name="LOG_FILE" value="/opt/tomcat/logs/application.log" />

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
      <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <file>${LOG_FILE}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_FILE}.%d</fileNamePattern>
      <maxHistory>7</maxHistory>
    </rollingPolicy>
  </appender>

  <springProfile name="local"> <!-- application-local.ymlはコンソール表示する -->
    <root level="INFO">
      <appender-ref ref="CONSOLE"/>
    </root>
  </springProfile>
  <springProfile name="dev,test,prod"> <!--application-dev.ymlなどはファイル出力する -->
    <root level="INFO">
      <appender-ref ref="FILE"/>
    </root>
  </springProfile>
</configuration>

fileNamePatternで指定した日付によってログローテートの単位は決まります。

単位 変数 備考
%d
%d{yyyyMMdd} 未確認
%d{yyyyMMddHH}
%d{yyyyMMddHHmm}
%d{yyyyww} 未確認

これでapplication.logにログ出力されるようになります。但し、Tomcatのcatalina.outにも出力はされるので肥大化していってしまいます。

springProfileタグ

springProfileタグを使用すれば各環境ごとの設定ができるので便利です。

name属性にprofile(dev,test,prodなど)を指定してあげればOKです。

Tomcatでのログ出力先

Tomcatでのログ出力先はlogback-spring.xmlの<property name=”LOG_FILE” value=”/opt/tomcat/logs/application.log” />に記載しています。

/opt/tomcat/logs/配下にapplication.logが作成されます。このファイルが指定した単位でローテートされます。

ログ出力先にJPAのSQLを出力したいときはapplication.ymlに以下記述の追記が必要です。

spring:
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    show-sql: true
    properties:
      hibernate:
        format__sql: true
# 以下追記
logging:
  level:
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE

コメント

タイトルとURLをコピーしました