QuickFix / J提供将其日志存储在数据库中的功能。
是否可以将其他列(业务ID)追加到其中一个表中,以免在QuickFix / J的内部消息记录中出现问题?
如果有可能,请提及这样做的程序。
答案 0 :(得分:2)
解决方案是创建自己的Logger和LoggerFactory,类似于QuickFix / J提供的。
您可以通过实施" quickfix.Log"来创建记录器。接口和LoggerFactory通过实现" quickfix.LogFactory"接口。
最简单的方法是使用QuickFix / J中的私有AbstractLog。
创建Log类:
- 从QuickFix / J的源代码复制AbstractLog课程,并将其包含在您的项目中。
- 创建一个扩展AbstractLog类并实现所有抽象方法的类。
- 为要附加到日志的任何额外字段创建成员变量(例如,业务ID),并提供一个构造函数,其中包含 作为论据并设定其价值。
- " logIncoming"和" logOutgoing" methods接受String参数。这是您要记录的数据。此时你可以 将您自己的字段(在第3点中添加)附加到日志中。你可以格式化 你想要的日志,你可以自由使用任何输出方法,即 控制台,数据库等,因为您必须自己实现它。
醇>
创建LoggerFactory:
创建一个实现quickfix.LogFactory接口的LoggerFactory。
在"创建"方法,创建并返回您使用所需构造函数之前创建的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实现获得帮助将是一个好主意。 例如登录控制台的记录器:ScreenLog,ScreenLogFactory
QuickFix / J来源: