• 2019年5月1日水曜日
アリスト戦記
アリスト戦記 https://blog.aristo-solutions.net/2019/05/javatemplatebatchlogback.html

logbackの共通値を変数化する

Javaでログ出力を作る際はlog4jを使うのが主流で、その設定値はlogback.xmlに書くものだ。

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR

などのログ出力の設定をしていくわけだが、ここでよくあるパータンがある。

  • ログ出力フォルダ
  • ログのフォーマット

大抵の場合、これらは全部同じなんだ。

「infoログはこのフォルダに出したいが、errorログは違いフォルダにしたい」

とか、見たこと無い。
フォーマットも同様である。

しかしながら、よくあるパターンなのは、全てのログ設定に同じパラメータをコピペ設定しているということ。

だから本番環境のログ出力フォルダが「/var/log」で、それをWindows環境で開発したい場合は、全カ所を「c://log」に張り替えなきゃいけなくなる。

これが面倒だ。

しかし、logback.xmlは変数を宣言して共通化することが出来る

変数宣言

こんな感じに変数を宣言すればOK。

 <!-- 変数定義 -->
 <property name="LOG_DIR" value="R:/log/JavaSample" />
 <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %-5level: [%logger:%L][%M] - %msg - [%t]%n" />


変数を呼び出す側も含めて全体的に書くとこうなる。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>

   <!-- 変数定義 -->
   <property name="LOG_DIR" value="R:/log/JavaSample" />
   <property name="PATTERN"
      value="%d{yyyy-MM-dd HH:mm:ss} %-5level: [%logger:%L][%M] - %msg - [%t]%n" />

   <!-- ログ・コンソール出力 -->
   <appender name="STOUT"
      class="ch.qos.logback.core.ConsoleAppender">
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>TRACE</level>
      </filter>
      <encoder>
         <charset>UTF-8</charset>
         <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>false</prudent>
   </appender>

   <!-- 全ログ -->
   <appender name="ALL"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_DIR}/all.log</file>
      <rollingPolicy
         class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
         <fileNamePattern>${LOG_DIR}/all.log.%i.log</fileNamePattern>
         <minIndex>0</minIndex>
         <maxIndex>9</maxIndex>
      </rollingPolicy>
      <triggeringPolicy
         class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <maxFileSize>500KB</maxFileSize>
      </triggeringPolicy>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>ALL</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>ACCEPT</onMismatch>
      </filter>
      <encoder>
         <pattern>${PATTERN}</pattern>
      </encoder>
   </appender>

   <!-- TRACEログ -->
   <appender name="TRACE"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_DIR}/debug.log</file>
      <rollingPolicy
         class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>${LOG_DIR}/trace-%d{yyyyMMdd}.log</fileNamePattern>
         <maxHistory>7</maxHistory>
      </rollingPolicy>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>TRACE</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
         <charset>UTF-8</charset>
         <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>true</prudent>
   </appender>

   <!-- DEBUGログ -->
   <appender name="DEBUG"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_DIR}/debug.log</file>
      <rollingPolicy
         class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>${LOG_DIR}/debug-%d{yyyyMMdd}.log</fileNamePattern>
         <maxHistory>7</maxHistory>
      </rollingPolicy>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>DEBUG</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
         <charset>UTF-8</charset>
         <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>true</prudent>
   </appender>

   <!-- INFOログ -->
   <appender name="INFO"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_DIR}/info.log</file>
      <rollingPolicy
         class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>${LOG_DIR}/info-%d{yyyyMMdd}.log</fileNamePattern>
         <maxHistory>7</maxHistory>
      </rollingPolicy>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>INFO</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
         <charset>UTF-8</charset>
         <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>true</prudent>
   </appender>

   <!-- WARNログ -->
   <appender name="WARN"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_DIR}/warn.log</file>
      <rollingPolicy
         class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>${LOG_DIR}/warn-%d{yyyyMMdd}.log</fileNamePattern>
         <maxHistory>7</maxHistory>
      </rollingPolicy>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>WARN</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
         <charset>UTF-8</charset>
         <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>true</prudent>
   </appender>

   <!-- ERRORログ -->
   <appender name="ERROR"
      class="ch.qos.logback.core.FileAppender">
      <file>${LOG_DIR}/error.log</file>
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>ERROR</level>
         <onMatch>ACCEPT</onMatch>
         <onMismatch>DENY</onMismatch>
      </filter>
      <encoder>
         <charset>UTF-8</charset>
         <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>true</prudent>
   </appender>

   <!-- ロガー・root設定 -->
   <root level="ALL">
      <appender-ref ref="STOUT" />
      <appender-ref ref="ALL" />
      <appender-ref ref="TRACE" />
      <appender-ref ref="DEBUG" />
      <appender-ref ref="INFO" />
      <appender-ref ref="WARN" />
      <appender-ref ref="ERROR" />
   </root>

   <!-- ロガー・パッケージ別設定 -->
   <logger name="net.solutions.aristo" additivity="false"
      level="INFO">
      <appender-ref ref="STOUT" />
      <appender-ref ref="ALL" />
      <appender-ref ref="TRACE" />
      <appender-ref ref="DEBUG" />
      <appender-ref ref="INFO" />
      <appender-ref ref="WARN" />
      <appender-ref ref="ERROR" />
   </logger>

</configuration>


これで切り替えも楽に出来るというものだぜ。

0 件のコメント:

コメントを投稿