ログ取得に関する設定
SmartDBのログ取得に関する設定を「log4j2.xml」にて行います。
ファイルパス: /etc/hibiki/
ファイル名: log4j2.xml
log4jの概要
log4jはJavaプログラム向けのログ取得APIで、log4j2.xmlはその動作を制御する設定ファイルです。 log4jは「Properties」「Appenders」、「Loggers」の3つのメイン要素から構成され、それぞれが協調して動作することでログメッセージの出力先や形式、優先度などを制御することができます。 「Properties」、「Appenders」、「Loggers」の働きは次のとおりです。
- Properties:設定ファイル内で使用するプロパティ(ログ出力パターンやログファイルパスなど)を指定する。
- Appenders:ログの出力先と出力フォーマットを指定する。
- 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>
設定ファイルの変更の自動読込み
■ 設定例
<Configuration monitorInterval="5">
これまで、default.xmlに設定していた「Tomcat再起動無しにlog4j.xmlの変更を反映する設定」は、不要となります。