2008年3月31日月曜日

RCPにError Logビューを表示する

RCPに標準のError Logビューを表示するには、IPerspectiveFactoryの実装クラスのcreateInitialLayout()メソッドで次のようにする。
Error Logビューはorg.eclipse.pde.runtimeプラグインで定義されているため、プラグインの依存関係にorg.eclipse.pde.runtimeを追加すること。

public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
// Error Logビューをパースペクティブに追加する
layout.addView("org.eclipse.pde.runtime.LogView", IPageLayout.BOTTOM, IPageLayout.DEFAULT_VIEW_RATIO, IPageLayout.ID_EDITOR_AREA);
}
}

2008年3月29日土曜日

Logging

EclipseにはLogging機能が予め用意されている。

Logを出力するには、org.eclipse.core.runtime.ILogインターフェースが提供する機能を使用する。このインターフェースの実装クラスはPluginクラスのgetLog()メソッドを呼び出すことで、取得することができる。
ActivatorがAbstractUIPluginのサブクラスだとすると、

// ActivatorはPluginのサブクラスであるAbstractUIPluginのサブクラス
ILog log = Activator.getDefault().getLog();


で取得できる。
ILogインターフェースを取得すれば、後は、IStatusインターフェースの実装クラスを引数として、log()メソッドを呼び出せば、ログファイルにログが出力される。
メッセージや種類(エラーか警告かなど)はそのIStatus実装クラスに設定する。

ログの出力先
ランタイムワークスペース/.metadata/.log

ログローテーション
ローテーションの設定は、システムプロパティで設定できる。


System Property説明
eclipse.log.backup.maxログファイルのバックアップ数。このプロパティに設定されている数だけ、.logがsize.maxを超えた場合に、バックアップとして退避される。
eclipse.log.size.maxログファイルのサイズ(KB)。Javadocには記載されていないが、最少値は10であり、それ以下の値は10とみなされる。

ただし、ローテーションの実装方法は若干特殊なので注意が必要。
Eclipse起動 -> .log書き込み -> .logのサイズがsize.maxを超えれば.bak_0.logへ退避 -> Eclipse終了 の繰り返しなので、何回起動したかにかかわらずsize.max * backup.max分のログを保持しているわけではなく、size.max > .logである間は、複数回の起動に関するログが.log内に保持されるが、size.max < .logとなった時点ですでに.bak_0.logがある場合は削除され、その上で.logが退避される。当然ながら、.bak_1.logがすでにあった場合、新しく作成された.bak_0.logとはつながらないことになる。