QuickFix/J 提供了将其日志存储在数据库中的功能。
是否可以以不会在 QuickFix/J 的内部消息日志记录中引起问题的方式将另一列(业务 ID)附加到其表中?
如果可能,请提及执行此操作的程序。
解决方案是创建自己的 Logger 和 LoggerFactory,类似于 QuickFix/J 提供的。
你可以通过实现“quickfix.Log”接口创建一个Logger,通过实现“quickfix.LogFactory”接口创建一个LoggerFactory。
最简单的方法是使用来自 QuickFix/J 的私有 AbstractLog。
创建日志类:
- 从 QuickFix/J 的源中复制AbstractLog类,并将其包含在您的项目中。
- 创建一个扩展 AbstractLog 类并实现所有抽象方法的类。
- 为要附加到日志的任何额外字段(例如业务 ID)创建成员变量,并提供一个构造函数,该构造函数将 is 作为参数并设置其值。
- “logIncoming”和“logOutgoing”方法采用字符串参数。这是您要记录的数据。此时,您可以将自己的字段(在第 3 点中添加)附加到日志中。您可以根据需要格式化日志,并且可以自由使用任何输出方法,即控制台、数据库等,因为您必须自己实现它。
创建 LoggerFactory:
创建一个实现 quickfix.LogFactory 接口的 LoggerFactory。
在“create”方法中,创建并返回您在使用您需要的构造函数之前创建的 Logger 的实例。
您需要传递给构造函数的值可以保存为 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: ScreenLog,ScreenLogFactory
QuickFix/J 来源: