付録10 Log4jを利用したログ出力
MotionBoardのログを出力するための機構として、「Apache Log4j(以降、Log4jと表記)」を使用できます。
書き出すログの内容を任意のレイアウトにしたり、ログローテーションを用いてファイルを出力したりできます。また、出力先をデータベースにすることでログをテーブルに出力することもできます。
参考
本ページの内容は、Log4jおよび関連知識を持っているユーザーに向けたものです。
用途
次のような用途で使用することを想定しています。
MotionBoardから出力されるログをデータベースに蓄積したい
MotionBoardを用いたクラスタリング環境において、ノードごとに出力されるログを1つの場所で管理したい
設定方法
MotionBoardのインストール時に作成される「log4j.xml」を編集して、ログの出力に関する設定を記述します。編集後、ファイルを保存してMotionBoardを再起動すると設定が反映されます。
log4j.xmlには、MotionBoardをインストールした環境に合わせた値が設定されています。このファイルを基に、出力対象とするログ種別や出力先、必要な事項を追加、更新、削除していきます。出力先ごとの編集例は、「log4j.xmlの編集例」を参照してください。<InstallDir>は、MotionBoardをインストールしたフォルダーです。
<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{キーワード}
<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には、ログの出力先となるデータベースをメンテナンスする機能(書き込み件数の制限やデータの保持日数など)はありません。
プロパティ | 解説 |
---|---|
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