付録10 Log4jを利用したログ出力

MotionBoardのログを出力するための機構として、「Apache Log4j(以降、Log4jと表記)」を使用できます。

書き出すログの内容を任意のレイアウトにしたり、ログローテーションを用いてファイルを出力したりできます。また、出力先をデータベースにすることでログをテーブルに出力することもできます。

参考

本ページの内容は、Log4jおよび関連知識を持っているユーザーに向けたものです。

用途

次のような用途で使用することを想定しています。

  • MotionBoardから出力されるログをデータベースに蓄積したい

  • MotionBoardを用いたクラスタリング環境において、ノードごとに出力されるログを1つの場所で管理したい

設定方法

MotionBoardのインストール時に作成される「log4j.xml」を編集して、ログの出力に関する設定を記述します。編集後、ファイルを保存してMotionBoardを再起動すると設定が反映されます。

log4j.xmlには、MotionBoardをインストールした環境に合わせた値が設定されています。このファイルを基に、出力対象とするログ種別や出力先、必要な事項を追加、更新、削除していきます。出力先ごとの編集例は、「log4j.xmlの編集例」を参照してください。<InstallDir>は、MotionBoardをインストールしたフォルダーです。

1. log4j.xmlの格納場所
<InstallDir>\system\webapps\motionboard\WEB-INF\classes\log4j.xml


注意

log4j.xmlを編集する場合は、事前にバックアップしておくことを推奨します。

ログの種別とカテゴリ名

出力できるログのログ種別は、次のカテゴリ名(<category>タグのname属性)となります。

ログ種別

カテゴリ名

通常ログ

log.common

操作ログ

log.operation

パフォーマンスログ

log.performance

顧客情報ログ

log.customer

データアクセスログ

log.dataaccess

ログに出力できる情報とレイアウトの指定

ログとして出力できるログ種別や項目、レイアウト(項目の並び順など)は、詳細に指定できます。

ログの補足情報は、MDC(Mapped Diagnostic Context)に格納されています。レイアウトでキーワード(項目)を指定することで、任意の項目をログに出力できます。レイアウトのクラス「org.apache.log4j.PatternLayout(以降、PatternLayoutと表記)」のvalueに、次の形式で記述します。

%X{キーワード}
2. 記述例(項目間を半角カンマで区切って出力)
<layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%X{datetime},%X{loglevel},%X{category},%X{messageId},%m,%X{info}"/>
</layout>


出力できる項目は、ログ種別で共通のものと固有のものとに分かれます。

出力できる項目(ログ種別共通)

項目

解説

datetime

ログが記録された日時

参考

ログが記録された日時の形式をCONFIGでカスタマイズしている場合、カスタマイズされた形式で情報が出力されます。詳細は、「2-1-5-2 ログに出力される時刻の形式をカスタマイズする」を参照してください。

loglevel

ログレベル(TRACE、DEBUG、INFO、WARN、ERROR、FATAL)

category

ログのカテゴリ(ACCESS、OPERATION、SYSTEM、METHODCALL、USER、AUTH)

messageId

メッセージID

traceId

トレースID

duration

経過時間

tenantId

テナントID

userId

ユーザーID

sessionId

セッションID

accessId

アクセスID

threadName

スレッド名

nodeName

ノード名(クラスタリング環境の場合のみ)

ipAddress

接続元IPアドレス

info

付加情報(スタックトレースなど)

dv-変数名

システム変数の値

出力できる項目(パフォーマンスログ固有)

項目

解説

processStartTime

処理開始時刻

boardPath

ボードパス

datasrcDefPath

データソースパス

totalRecordCount

総データ件数

extractedRecordCount

サーバー抽出件数

queryProcessTime

クエリー処理時間

serverProcessTime

全体処理時間

isCached

キャッシュフラグ

cacheCreateDate

キャッシュ作成日時

出力できる項目(データアクセスログ固有)

項目

解説

comId

接続ID

dbName

データベース名

tableName

テーブル名

column

テーブルカラム

searchCondition

検索条件

comInfo

接続情報

パターン文字指定時の留意点

PatternLayoutのvalueに、次のパターン文字を指定しても正しい情報は得られません。

パターン文字

代替文字

%C

ありません。

%d

%X{datetime}を指定してください。

%F

ありません。

%l

ありません。

%L

ありません。

%M

ありません。

%p

%X{loglevel}を指定してください。

%r

ありません。

%t

%X{threadName}を指定してください。

データベースへのログ出力

データベースのテーブルにログを出力するには、クラス「com.fourclue.codes.log.log4j.JDBCAppender」を使用します。

参考

  • ログの出力先となるデータベースのjarは、事前に用意されているものとします。

  • ログの出力先をデータベースとする場合は、テーブルが事前に作成されているものとします。

  • MotionBoardには、ログの出力先となるデータベースをメンテナンスする機能(書き込み件数の制限やデータの保持日数など)はありません。

1. クラス「com.fourclue.codes.log.log4j.JDBCAppender」のプロパティ

プロパティ

解説

driverDir

JDBCドライバーが置いてあるフォルダーへのパスを指定します。

3. 記述例
C:\MotionBoard60\custom\lib


参考

TomcatやMotionBoardのクラスパスに直接JDBCドライバーを配置した場合、MotionBoardにバンドルされているドライバーと競合する可能性があります。そのため、JDBCドライバーを直接クラスパス内には配置しないでください。

driverClass

使用するJDBCドライバーのクラスを指定します。

4. 記述例(接続先がMySQLの場合)
com.mysql.jdbc.Driver


url

接続先のデータベースへのURLを指定します。

5. 記述例(接続先がMySQLの場合)
jdbc:mysql://host:port/database


user

データベースへのログインに使用するユーザー名を指定します。

password

データベースへのログインに使用するパスワードを指定します。

validateSql

データベースへの接続確認に使用するSQL文です。空の場合は、ConnectionクラスのisValidを使用します。

insertSql

データベースのテーブルにログ(の行)を追加するためのSQL文(Insert文)を、valueに指定します。追加する値は「?」で表し、半角カンマ(,)で区切ります。ここで使えるのは、JavaのPreparedStatementの書式です。

6. 記述例(テーブル「MB_LOG」にログを追加)
<param name="insertSql" value="INSERT INTO MB_LOG (datetime, loglevel, category, messageId, message, info) VALUES (?, ?, ?, ?, ?, ?)"/>


ConversionPattern

insertSqlの「?」に対応する値を、valueに指定します。複数の値がある場合は、半角カンマ(,)で区切ります。指定する値の数と順序は、insertSqlで記述した「?」の数と順序に合わせます。

7. 記述例
<layout class="org.apache.log4j.PatternLayout">
  <param name="ConversionPattern" value="%X{datetime},%X{loglevel},%X{category},%X{messageId},%m,%X{info}"/>
</layout>




log4j.xmlの編集例

log4j.xmlには、ログの出力先を「ファイルにする場合」と「JDBC(データベース)にする場合」のサンプルがコメントアウトされています。

目的の出力先からコメントを外して、動作環境に適した内容に変更します。次に、出力先ごとにコメントを外す場所を示します。

ログの出力先をファイルにする場合

次のもののコメントを外してください。

  • <appender>タグのname属性が次のもの

    • common.log

    • operation.log

    • performance.log

    • customer.log

    • dataaccess.log

  • <category>タグのname属性が次のもので、<appender-ref>タグのref属性が「.log」のもの

    • log.common

    • log.operation

    • log.performance

    • log.customer

    • log.dataaccess

ログの出力先をJDBC(データベース)にする場合

次のもののコメントを外してください。

  • <appender>タグのname属性が次のもの

    • common.jdbc

    • operation.jdbc

    • performance.jdbc

    • customer.jdbc

    • dataaccess.jdbc

  • <category>タグのname属性が次のもので、<appender-ref>タグのref属性が「.jdbc」のもの

    • log.common

    • log.operation

    • log.performance

    • log.customer

    • log.dataaccess