第13章 ロギング


この章では、Business Process Manager のロギング機能と、その機能を利用するさまざまな方法について説明します。
ロギングの目的は、プロセス実行の履歴を記録することです。各プロセス実行のランタイムデータが変更されると、変更がログに保存されます。
注記
この章で説明する プロセスロギング は、ソフトウェアロギング と混同しないよう注意してください。ソフトウェアロギングは、ソフトウェアプログラムの実行を (通常はデバッグ目的で) トレースします。プロセスロギングは、対照的に、プロセスインスタンスの実行を追跡します。
プロセスのログ情報が役立つ場面は数多くあります。これらの中で最も明白なのは、プロセス実行参加者によるプロセス履歴の参照です。
もう 1 つのユースケースは、ビジネスアクティビティーモニタリング (BAM) のユースケースです。これを使用すると、プロセス実行のログを照会または分析し、ビジネスプロセスに関する有用な統計情報を見つけることができます。この情報は、組織で "実際" のビジネスプロセス管理を実装する際の鍵となります。(実際のビジネスプロセス管理とは、組織がそのプロセスを管理する方法、情報技術によるプロセスのサポート方法、および反復的なプロセスでこれら 2 つを使用して相互に改善する方法に関係します。)
プロセスログは、"元に戻す" 操作の実装にも使用できます。ログには、ランタイムのすべての情報変更に関するレコードが含まれているため、変更を逆の順序で "再生" することで、プロセスを前の状態に戻すことができます。

13.1. ログの作成

Business Process Manager モジュールは、プロセスの実行時にログを生成します。ただし、ユーザーはプロセスログを挿入することもできます。(ログエントリーは、org.jbpm.logging.log.ProcessLog から継承する Java オブジェクトです。) プロセスログのエントリーは、ProcessInstance のオプションの拡張である LoggingInstance に追加されます。
Business Process Manager は、グラフ実行ログ、コンテキストログ、タスク管理ログなど、さまざまな種類のログを生成します。org.jbpm.logging.log.ProcessLog から始めることをお勧めします。これを使用して、継承ツリー の下層に移動することができるためです。
LoggingInstance は、すべてのログエントリーを収集します。ProcessInstance が保存されると、ログエントリーはここからデータベースにフラッシュされます。(ProcessInstancelogs フィールドは Hibernate にマッピングされていません。これは、各トランザクションでデータベースから取得されるこれらのログを回避するためです。)
ProcessInstance は実行パスのコンテキストで作成されるため、ProcessLog はそのトークンを参照します。トークンは、インデックスシーケンスジェネレーター としても機能します。(これにより後続のトランザクションで生成されるログに連続したシーケンス番号が付けられるため、これはログの取得にとって重要です。)
次の API メソッドを使用して、プロセスログを追加します。
public class LoggingInstance extends ModuleInstance {
  ...
  public void addLog(ProcessLog processLog) {...}
  ...
}
Copy to Clipboard Toggle word wrap
以下は、情報ログの UML 図です。

図13.1 jBPM のログ情報のクラス図

CompositeLog は特殊なケースです。これは、多数の子の親ログとして機能するため、階層構造を適用する手段を提供します。ログの挿入には、次のアプリケーションプログラミングインターフェイスを使用します。
public class LoggingInstance extends ModuleInstance {
  ...
  public void startCompositeLog(CompositeLog compositeLog) {...}
  public void endCompositeLog() {...}
  ...
}
Copy to Clipboard Toggle word wrap
階層構造が一貫していることを確認するために、CompositeLog は常に try-finally-block で呼び出す必要があります。以下はその例です。
startCompositeLog(new MyCompositeLog());
try {
  ...
} finally {
  endCompositeLog();
}
Copy to Clipboard Toggle word wrap

13.2. ログ設定

特定のデプロイメントにとってログが重要でない場合は、jbpm.cfg.xml 設定ファイルのセクション jbpm-context からロギングの行を削除します。
<service name='logging'
    factory='org.jbpm.logging.db.DbLoggingServiceFactory' />
Copy to Clipboard Toggle word wrap
ログをフィルタリングするには、LoggingService のカスタム実装を記述します (これは DbLoggingService のサブクラスです)。その後、ロギング用のカスタム ServiceFactory を作成し、それを factory 属性で指定します。

13.3. ログの取得

プロセスインスタンスのログは、常にデータベースクエリーを介して取得する必要があります。LoggingSession を介してこれを実現するには、2 つの方法があります。
最初の方法は、プロセスインスタンスのすべてのログを取得する方法です。これらのログは、マップ内のトークンごとにグループ化されます。このマップは、ProcessLog のリストをプロセスインスタンス内のすべてのトークンに関連付けます。リストには、作成された順序と同じ順序で ProcessLogs が含まれます。
public class LoggingSession {
  ...
  public Map findLogsByProcessInstance(long processInstanceId) {...}
  ...
}
Copy to Clipboard Toggle word wrap
2 番目の方法は、特定のトークンのログを取得する方法です。リストには、作成された順序と同じ順序で ProcessLogs が含まれます。
public class LoggingSession {
  public List findLogsByToken(long tokenId) {...}
  ...
}
Copy to Clipboard Toggle word wrap
この章では、jBPM のロギングの仕組みとロギングのさまざまな用途の概要を説明しました。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat