2

QuickFix/J は、ログをデータベースに保存する機能を提供します。

QuickFix/J の内部メッセージ ログで問題が発生しないように、テーブルの 1 つに別の列 (ビジネス ID) を追加することはできますか?

可能であれば、それを行う手順も親切に記載してください。

4

1 に答える 1

2

解決策は、QuickFix/J が提供するものと同様の独自の Logger と LoggerFactory を作成することです。

「quickfix.Log」インターフェースを実装して Logger を作成し、「quickfix.LogFactory」インターフェースを実装して LoggerFactory を作成できます。

最も簡単な方法は、QuickFix/J のプライベート AbstractLog を使用することです。

ログ クラスの作成:

  1. QuickFix/J のソースからAbstractLogクラスをそのままコピーし、プロジェクトに含めます。
  2. AbstractLog クラスを拡張し、すべての抽象メソッドを実装するクラスを作成します。
  3. ログに追加する任意の追加フィールド (ビジネス ID など) のメンバー変数を作成し、引数として is を取り、その値を設定するコンストラクターを提供します。
  4. 「logIncoming」および「logOutgoing」メソッドは String パラメータを取ります。これは、ログに記録するデータです。この時点で、独自のフィールド (ポイント 3 で追加) をログに追加できます。必要に応じてログをフォーマットすることができ、自分で実装する必要があるため、コンソール、データベースなど、任意の出力方法を自由に使用できます。

LoggerFactory の作成:

  1. quickfix.LogFactory インターフェースを実装する LoggerFactory を作成します。

  2. 「create」メソッドでは、必要なコンストラクターを使用する前に、作成した Logger のインスタンスを作成して返します。

  3. コンストラクターに渡す必要がある値は、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 の実装を参照してヘルプを確認することをお勧めします。例: コンソールにログオンするロガー: ScreenLogScreenLogFactory

QuickFix/J ソース:

https://github.com/quickfix-j/quickfixj

于 2015-10-15T07:06:47.093 に答える