2

QuickFix/J 提供了将其日志存储在数据库中的功能。

是否可以以不会在 QuickFix/J 的内部消息日志记录中引起问题的方式将另一列(业务 ID)附加到其表中?

如果可能,请提及执行此操作的程序。

4

1 回答 1

2

解决方案是创建自己的 Logger 和 LoggerFactory,类似于 QuickFix/J 提供的。

你可以通过实现“quickfix.Log”接口创建一个Logger,通过实现“quickfix.LogFactory”接口创建一个LoggerFactory。

最简单的方法是使用来自 QuickFix/J 的私有 AbstractLog。

创建日志类:

  1. 从 QuickFix/J 的源中复制AbstractLog类,并将其包含在您的项目中。
  2. 创建一个扩展 AbstractLog 类并实现所有抽象方法的类。
  3. 为要附加到日志的任何额外字段(例如业务 ID)创建成员变量,并提供一个构造函数,该构造函数将 is 作为参数并设置其值。
  4. “logIncoming”和“logOutgoing”方法采用字符串参数。这是您要记录的数据。此时,您可以将自己的字段(在第 3 点中添加)附加到日志中。您可以根据需要格式化日志,并且可以自由使用任何输出方法,即控制台、数据库等,因为您必须自己实现它。

创建 LoggerFactory:

  1. 创建一个实现 quickfix.LogFactory 接口的 LoggerFactory。

  2. 在“create”方法中,创建并返回您在使用您需要的构造函数之前创建的 Logger 的实例。

  3. 您需要传递给构造函数的值可以保存为 LoggerFactory 的成员变量,并在 LoggerFactory 的构造函数中设置。

您现在有一个自定义 Logger,可以将其用作 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 实现以寻求帮助将是一个好主意。例如,在控制台上登录的 Logger: ScreenLogScreenLogFactory

QuickFix/J 来源:

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

于 2015-10-15T07:06:47.093 回答