如何禁用所有 Quickfix/n 的日志和文件工厂?我想自己处理所有日志记录和消息发送,因为我不喜欢 Quickfix 获取日志消息的方式,这意味着我想决定何时以及如何产生日志消息。有没有办法完全禁用任何基于屏幕或基于文件的日志记录?
谢谢
如何禁用所有 Quickfix/n 的日志和文件工厂?我想自己处理所有日志记录和消息发送,因为我不喜欢 Quickfix 获取日志消息的方式,这意味着我想决定何时以及如何产生日志消息。有没有办法完全禁用任何基于屏幕或基于文件的日志记录?
谢谢
应该有一个 NullLogFactory,但我目前没有看到,我有点困惑为什么没有。我以为有一个。(如果你不知道,我维持 QF/n。)
但是您可以像这样创建一个:
public class NullLogFactory : ILogFactory
{
SessionSettings settings_;
#region LogFactory Members
public NullLogFactory(SessionSettings settings)
{}
public ILog Create(SessionID sessionID)
{
return new QuickFix.NullLog();
}
#endregion
}
下一个 QF/n 版本将包含一个空工厂或其他东西来填补这个空白。
老问题,但可能对搜索这个的人有用。
如果您想让启用/禁用日志记录变得更容易,我认为最好在 app.config 文件中设置一个值并在套接字启动器类中处理它,如下所示:
应用程序配置
<appSettings>
<add key="LogMessages" value="false"/>
</appSettings>
申请代码
bool logMessages = Convert.ToBoolean(ConfigurationManager.AppSettings["LogMessages"]);
try
{
SocketInitiator initiator;
QuickFix.SessionSettings settings = new QuickFix.SessionSettings(file);
MessageProcessor application = new MessageProcessor();
QuickFix.IMessageStoreFactory storeFactory = new QuickFix.FileStoreFactory(settings);
QuickFix.ILogFactory logFactory = new QuickFix.FileLogFactory(settings);
if (!logMessages)
{
initiator = new QuickFix.Transport.SocketInitiator(application, storeFactory, settings);
}
else
{
initiator = new QuickFix.Transport.SocketInitiator(application, storeFactory, settings, logFactory);
}
application.MyInitiator = initiator;
initiator.Start();
while (!initiator.IsLoggedOn)
{
//wait until the initiator has logged on
}
//do stuff
}
catch
{// exception handling code}
这个问题是一个老问题,但如果有人遇到与我没有找到任何相关问题相同的问题,希望这个答案会有所帮助。
根据Quickfix Configuration,配置文件中的默认值为FileLogPath
“-”。FileLogPath
因此,请从您的配置文件中删除或注释该设置。
创建套接字启动器实例时,Quickfix SocketInitiator 类有 3 个重载,如下所述。
public SocketInitiator(IApplication application, IMessageStoreFactory storeFactory, SessionSettings settings);
public SocketInitiator(IApplication application, IMessageStoreFactory storeFactory, SessionSettings settings, ILogFactory logFactory);
public SocketInitiator(IApplication application, IMessageStoreFactory storeFactory, SessionSettings settings, ILogFactory logFactory, IMessageFactory messageFactory);
我们需要使用第一个,因为我们需要关闭 quickfix 日志。
下面提到了示例代码段
SessionSettings settings = new("your-config.cfg");
IMessageStoreFactory storeFactory = new FileStoreFactory(settings);
SocketInitiator initiator = new(_application, storeFactory, settings);
之后,您可以实现不同的日志记录机制来处理您的日志。例如,Serilog