xfyプラットフォームのログ出力管理

xfyプラットフォームのログ出力管理の仕組みと利用方法を解説します。

1. この文書の概要

この文書では、xfyプラットフォームのログ出力管理の仕組みとその利用方法を説明します。ログ出力管理の情報は、xfyプラットフォームを利用するときや、xfyプラットフォームでxfyプラグインやxfyコンポーネントを開発するときに役立ちます。

2. ログ出力管理の仕組み

xfyプラットフォームにおけるログ出力管理にはJavaのロギング機能を利用しています。Javaのロギング機能はjava.util.loggingパッケージにまとめられています。Javaのロギング機能について、詳しくはJavaのドキュメントを参照してください。

xfyプラットフォームのログ出力管理では、次の処理を行います。

3. ログの出力先

ログは次の出力先に出力できます。

以下、それぞれの出力先の詳細を説明します。

3.1. ログファイルへの出力

ログファイルはxfyプラットフォームをインストールしたフォルダにあるlogフォルダ内に出力されます。最大で5つのログファイルが出力されます。ファイル名はxfylog{通し番号}.xmlです。{通し番号}は、0から4の数字に置き換えられます。

ログファイルへは、INFOレベル以上のログが出力されます。出力されるログのレベルは固定です。

ログファイルへ出力される内容の例を、次に示します。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
  <date>2006-08-24T15:45:42</date>
  <millis>1156401942007</millis>
  <sequence>98</sequence>
  <logger>com.xfy</logger>
  <level>INFO</level>
  <class>com.xfy.css.CssStyleImpl</class>
  <method>add</method>
  <thread>10</thread>
  <message>CSSPropertyService: CSS property [prop] is not supported!</message>
</record>
</log>

3.2. コンソールへの出力

Javaのデフォルトの設定では、INFOレベル以上のログはコンソールに出力されます。xfyプラットフォームではこの設定を無効にしているので、そのままではログはコンソールに出力されません。ログをコンソールへ出力するには、起動パラメータでデバッグオプションを指定してxfyプラットフォームを起動します。指定するデバッグオプションは-Dcom.xfy.place.XfyPlace.debug=trueです。同時に、別プロセスで起動するのを抑制するために、-Dcom.xfy.startup.XfyStartup.without-jvm-restart=trueを指定します。このことより、ログをコンソールへ出力するときは、コンソールに次のように入力してxfyプラットフォームを起動します。

java -Dcom.xfy.place.XfyPlace.debug=true -Dcom.xfy.startup.XfyStartup.without-jvm-restart=true -jar xfyClient.jar

コンソールへの出力はJavaのデフォルトの機能なので、起動パラメータや設定ファイルを差し替えてカスタマイズできます。詳しくはJavaのドキュメントを参照してください。

4. ログ出力管理の利用

xfyコンポーネントやxfyプラグインを作成するときに、ログ出力管理を利用してログを出力する方法を紹介します。ログを出力するときは、必ずここで紹介する方法を使用してください。

ログ出力管理を利用してログを出力する手順は、次のとおりです。

  1. com.xfy.place.XfyPlaceクラスのgetLogger()Loggerを取得する。
  2. 取得したLoggerlog(Level,String)log(Level,String,Throwable)info(String)などを使ってログを出力する。

例えば、"Hello xfy log."というInfoレベルのログを出力するコードは次のとおりです。

XfyPlace.getLogger().info("Hello xfy log.");

なお、例外をキャッチしたことを知らせるログを出力する場合は、log(Level,String,Throwable)を利用することを推奨します。IOExceptionをキャッチした場合の例を、次に示します。

try{
   //IOExceptionが発生するような処理
}catch(IOException ex){
   XfyPlace.getLogger().log(Level.INFO,"load error",ex);
}

ログはログレベルによって扱い方が異なります。xfyプラットフォームでは、それぞれのログレベルはデフォルトで次のように扱われます。

Level.FINE以下
何も出力されません。
Level.INFO
ログファイルに出力されますが、警告メッセージは表示されません。
Level.WARNING
ログファイルに出力されると同時に、利用者に警告メッセージが表示されます。
Level.SEVERE
ログファイルに出力されると同時に、利用者に警告メッセージが表示されます。

出力するログのログレベルは、ログの扱い方とログの内容から適切なレベルを選択します。WARNINGレベルとSEVEREレベルではログの扱い方に違いはないので、どちらにするかはログの内容で判断します。利用者に警告メッセージを表示する必要がある場面のログのうち、より深刻で以降の動作に影響があり、xfyプラットフォームを再起動する必要があるものはSEVEREレベルにします。

なお、現在はWARNINGレベルとSEVEREレベルとで、表示される警告のメッセージボックスの表示スタイルに違いはありません。

以下、ログレベルの選択例を具体的な例で示します。これはあくまで例であり、強制ではありません。同じようなログの内容でも、状況に応じて別のログレベルを選んでもかまいません。

Java開発者がデバッグ用に残すログ
これは開発者が見られればよいものです。ログファイルに残したり、警告メッセージを表示したりする必要はありません。むしろ通常の利用時に記録されていては困るので、Level.Fineにします。
「非推奨なインストラクションやコマンドを利用した」というようなXVCD開発者へのログ
xfyプラットフォームを利用する場面でこうした警告が出るのは問題です。しかしログには残しておきたいので、Level.INFOにします。
XVCDの記述ミス
利用者にとって、これはアプリケーションのバグに該当します。警告メッセージを表示する必要があるので、Level.WARNINGにします。
OutOfMemoryError
通常、このErrorオブジェクトをキャッチする必要はありません。キャッチする必要がある場合は、深刻な問題で以降の動作にも影響があるので、Level.SEVEREにします。