ログ取得に関する設定

SmartDBのログ取得に関する設定を「log4j2.xml」にて行います。

ファイルパス: /etc/hibiki/
ファイル名: log4j2.xml

log4jの概要

log4jはJavaプログラム向けのログ取得APIで、log4j2.xmlはその動作を制御する設定ファイルです。 log4jは「Properties」「Appenders」、「Loggers」の3つのメイン要素から構成され、それぞれが協調して動作することでログメッセージの出力先や形式、優先度などを制御することができます。 「Properties」、「Appenders」、「Loggers」の働きは次のとおりです。

  1. Properties:設定ファイル内で使用するプロパティ(ログ出力パターンやログファイルパスなど)を指定する。
  2. Appenders:ログの出力先と出力フォーマットを指定する。
  3. Loggers:ログの出力対象に対して、ログの出力先とログの出力レベルを指定する。

■ 記載例

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">

    <!-- 設定ファイル内で使用するプロパティ(ログ出力パターンやログファイルパスなど)を指定する -->
    <Properties>
        <Property name="...">hoge</Property>
        <Property name="..." value="..." />
    </Properties>

    <!-- ログの出力先と出力フォーマットを指定する -->
    <Appenders>
      <Syslog name="..." host="..." port="..." />
      <RollingFile name="..." filename="..." filePattern="...">
        <Policies>
          <TimeBasedTriggeringPolicy />
        </Policies>
      </RollingFile>
    </Appenders>

    <!-- ログの出力対象に対して、ログの出力先とログの出力レベルを指定する -->
    <Loggers>
        <Logger name="..." level="..."></Logger>
        <Logger name="..." level="..."></Logger>
    </Loggers>
</Configuration>

プロパティの設定(Properties)

設定ファイル内で使用するプロパティを定義します。 何度も使用するログ出力レイアウトやログファイルパスなどを設定します。

■ 設定例

<Properties>
    <Property name="HIBIKI_LAYOUT">%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %C{2} (%F:%L) : %m%n</Property>
    <Property name="RESPONSE_LAYOUT">%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %C{2} (%F:%L) --- %m%n</Property>
    <Property name="SMARTCABINET_ACCESS_LAYOUT">%m%n</Property>
    <Property name="AUDIT_LAYOUT">when:%X{when} where:%X{where} who:%X{who} operation:%X{operation} objective:%X{objective} target:%X{target} revision:%X{revision} result:%X{result} exception:%X{exception}%n</Property>
    <Property name="DEVELOP_LAYOUT">%-5p %C{2} (%F:%L) --- %m%e{ (%method% %uri%%query% %accountId%)}%n</Property>
    <Property name="BASE_DIR">/var/log/hibiki</Property>
</Properties>

ログ出力レイアウトの設定(PatternLayout)

ログ出力のレイアウトを設定します。ここではデフォルトで利用している「PatternLayout」について記載します。

レイアウトはProperty要素に「Conversion Pattern」を指定することで設定できます。 パターン文字列の一覧は、以下の【表 Conversion Patternに指定できるパターン文字列】のとおりです。

表 Conversion Patternに指定できるパターン文字列

パターン文字列 意味
%c カテゴリ名。
%c{1}のように{ }内に取得するレベルを指定することが可能。
%C ログを生成したクラス名。
%C{1}のように{ }内に取得するレベルを指定することが可能。
%d ログを生成した日付情報。
%d{yyyy-MM-dd HH:mm:ss}のように{ }内に取得する日付フォーマットを指定することが可能。
%l ログを生成したソースファイル名と行数。
※性能への影響を考慮して使用してください。
%F ログを生成したソースファイル名。
※性能への影響を考慮して使用してください。
%L ログを生成したソースファイルの行数。
※性能への影響を考慮して使用してください。
%M ログを生成したメソッド名。
※性能への影響を考慮して使用してください。
%m ログメッセージ。
%x NDCにプッシュされた文字列。
%X{key} MDCにセットされた文字列(key)。
※監査ログ取得する項目は、この文字列(key)で指定します。
指定可能な項目については【監査ログのフィールド定義】を参照してください。
%n 改行を挿入する。
%p ログレベル(プライオリティ)。
%r ログ取得機能がセットアップされてからの経過時間(単位はミリ秒)
%t ログを生成したスレッド名。

ログ出力先の設定(Appenders)

ログの出力先の設定をAppenderで行います。 SmartDBで使用するAppenderとオプションは【表 使用するAppender一覧】のとおりです。 また各オプションの意味は表 【表 Appenderのオプション】のとおりです。 またappender要素のname属性でAppenderごとに参照名を設定することができます。 この名前を用いてログ出力対象を分類することも可能です。

(分類については【ログ出力対象の分類と設定(Loggers)】を参照してください。)

表 使用するAppender一覧

Appender ログ出力先 指定できるオプション
Syslog syslogに出力。 name
format
host
port
protocol
Console 標準出力または標準エラー出力。 name
target
RollingFile ファイルに出力。
指定したpolicy(ファイルサイズ、日時など)に従ってローテートを行う。
name
fileName
filePattern
policy
append
bufferdIO
bufferSize
immediateFlush

表 Appenderのオプション

オプション 意味
name Appenderの名前。Loggersの中で使用。
format Syslogのフォーマット。指定なしの場合はBSD形式。
host リモート受信モードのsyslogdが起動しているマシン名、あるいはIPアドレス。
port リモート受信モードのsyslogdが起動しているマシンのポート番号。
protocol 使用するプロトコル。「TCP」または「UDP」を指定。
target ログの出力先。
SYSTEM_OUT:標準出力
SYSTEM_ERR:標準エラー出力
fileName ログを出力するファイル名。
filePattern ローテートした際のファイル名のパターン。
policy ログをローテートする際のポリシー。
Policiesタグで複数指定が可能。
CronTriggeringPolicy:指定したcron式に基づいて、ローテートします。
OnStartupTriggeringPolicy:ログファイルが現在のJVMの開始時刻よりも古く、最小ファイルサイズが満たされている場合にローテートします。
SizeBasedTriggeringPolicy:ログファイルが指定されたサイズに達すると、ローテートします。
TimeBasedTriggeringPolicy:日付/時刻パターンがアクティブなファイルに適用されなくなるとローテートします。
append ログファイルを追記モードとするかどうかの設定。
true:追記モードとする。
false:追記モードとしない。
bufferdIO ログ情報をバッファリングするかどうかの設定。
true:バッファリングする。
false:バッファリングしない。
bufferSize ログ情報をバッファリングする場合のバッファサイズ。
immediateFlush ログの書き込みバッファを即時に反映させるかどうかの設定。
true:即時に反映する。
false:即時に反映しない。

■ 設定例

<Appenders>
    <!-- HIBIKI_LOG -->
    <RollingFile name="HIBIKI_LOG" fileName="${BASE_DIR}/hibiki.log" filePattern="${BASE_DIR}/hibiki.log.%d{yyyyMMdd}">
        <PatternLayout pattern="${HIBIKI_LAYOUT}"/>
        <TimeBasedTriggeringPolicy />
    </RollingFile>
    <!-- RESPONSE_LOG -->
    <RollingFile name="RESPONSE_LOG" fileName="${BASE_DIR}/response.log" filePattern="${BASE_DIR}/response.log.%d{yyyyMMdd}">
        <PatternLayout pattern="${RESPONSE_LAYOUT}"/>
        <TimeBasedTriggeringPolicy />
    </RollingFile>
    <!-- SMARTCABINET_ACCESS_LOG -->
    <RollingFile name="SMARTCABINET_ACCESS_LOG" fileName="${BASE_DIR}/access.log" filePattern="${BASE_DIR}/access.log.%d{yyyyMMdd}">
        <PatternLayout pattern="${SMARTCABINET_ACCESS_LAYOUT}"/>
        <TimeBasedTriggeringPolicy />
    </RollingFile>
    <!-- AUDIT_LOG -->
    <RollingFile name="AUDIT_LOG" fileName="${BASE_DIR}/audit.log" filePattern="${BASE_DIR}/audit.log.%d{yyyyMMdd}">
        <PatternLayout pattern="${AUDIT_LAYOUT}"/>
        <TimeBasedTriggeringPolicy />
    </RollingFile>

    <!-- CONSOLE for DEVELOP -->
    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="${DEVELOP_LAYOUT}"/>
    </Console>
</Appenders>

ログ出力対象の分類と設定(Loggers)

ログを出力するJavaパッケージ、ログレベル、ログの出力先を設定します。

表 ログ出力対象の分類と設定

オプション 意味
name ログに出力するJavaパッケージ。
level ログに出力するログレベル。
addivity 上位Loggerへの設定を伝播するかをどうかを設定。
TRUE:伝播する。
FALSE:伝播しない。
AppenderRef ログを出力するAppenderの名前を指定。複数のAppenderにログ出力したい場合は、タグを必要な分だけ記述する。

■ 設定例

<Loggers>
    <Logger name="jp.co.dreamarts" level="info" additivity="false">
        <AppenderRef ref="HIBIKI_LOG"/>
    </Logger>
    <Logger name="velocity" level="fatal" additivity="false">
        <AppenderRef ref="HIBIKI_LOG"/>
    </Logger>
    <Logger name="jp.co.dreamarts.insuite.system.filters.TimeKeeperFilter" level="warn" additivity="false">
        <AppenderRef ref="RESPONSE_LOG"/>
    </Logger>
    <Logger name="jp.co.dreamarts.insuite.brd.action.filter._BRDActionFilterAccessLog" level="trace" additivity="false">
        <AppenderRef ref="SMARTCABINET_ACCESS_LOG"/>
    </Logger>
    <Logger name="AuditLog" level="trace" additivity="false">
        <AppenderRef ref="AUDIT_LOG"/>
    </Logger>
</Loggers>

設定ファイルの変更の自動読込み

の属性「monitorInterval」を指定すると、SmartDBを再起動せずに、指定した間隔(単位は秒)で設定の変更を読み込みます。

■ 設定例

<Configuration monitorInterval="5">

これまで、default.xmlに設定していた「Tomcat再起動無しにlog4j.xmlの変更を反映する設定」は、不要となります。