QuickFix/J は、ログをデータベースに保存する機能を提供します。
QuickFix/J の内部メッセージ ログで問題が発生しないように、テーブルの 1 つに別の列 (ビジネス ID) を追加することはできますか?
可能であれば、それを行う手順も親切に記載してください。
解決策は、QuickFix/J が提供するものと同様の独自の Logger と LoggerFactory を作成することです。
「quickfix.Log」インターフェースを実装して Logger を作成し、「quickfix.LogFactory」インターフェースを実装して LoggerFactory を作成できます。
最も簡単な方法は、QuickFix/J のプライベート AbstractLog を使用することです。
ログ クラスの作成:
- QuickFix/J のソースからAbstractLogクラスをそのままコピーし、プロジェクトに含めます。
- AbstractLog クラスを拡張し、すべての抽象メソッドを実装するクラスを作成します。
- ログに追加する任意の追加フィールド (ビジネス ID など) のメンバー変数を作成し、引数として is を取り、その値を設定するコンストラクターを提供します。
- 「logIncoming」および「logOutgoing」メソッドは String パラメータを取ります。これは、ログに記録するデータです。この時点で、独自のフィールド (ポイント 3 で追加) をログに追加できます。必要に応じてログをフォーマットすることができ、自分で実装する必要があるため、コンソール、データベースなど、任意の出力方法を自由に使用できます。
LoggerFactory の作成:
quickfix.LogFactory インターフェースを実装する LoggerFactory を作成します。
「create」メソッドでは、必要なコンストラクターを使用する前に、作成した Logger のインスタンスを作成して返します。
コンストラクターに渡す必要がある値は、LoggerFactory のメンバー変数として保持し、LoggerFactory のコンストラクターで設定できます。
これでカスタム ロガーが作成され、QuickFix/J 独自のロガーが使用されるため、それを使用できます。QuickFix/J はロガーを使用して自動的にログを記録します。
ApplicationAdapter application = new FixInitiator();
SessionSettings settings = new SessionSettings("./config/initiator.cfg");
CustomLogFactory customLogFactory = new CustomLogFactory(settings, myCustomID);
DefaultMessageFactory messageFactory = new DefaultMessageFactory();
FileStoreFactory fileStoreFactory = new FileStoreFactory(settings);
socketInitiator = new SocketInitiator(application, fileStoreFactory, settings, customLogFactory, messageFactory);
socketInitiator.start();
QuickFix/J 独自の Logger および LoggerFactory の実装を参照してヘルプを確認することをお勧めします。例: コンソールにログオンするロガー: ScreenLog、ScreenLogFactory
QuickFix/J ソース: