3

如何禁用所有 Quickfix/n 的日志和文件工厂?我想自己处理所有日志记录和消息发送,因为我不喜欢 Quickfix 获取日志消息的方式,这意味着我想决定何时以及如何产生日志消息。有没有办法完全禁用任何基于屏幕或基于文件的日志记录?

谢谢

4

3 回答 3

1

应该有一个 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 版本将包含一个空工厂或其他东西来填补这个空白。

于 2013-08-01T13:46:29.000 回答
1

老问题,但可能对搜索这个的人有用。

如果您想让启用/禁用日志记录变得更容易,我认为最好在 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}
于 2014-11-26T05:38:46.487 回答
0

这个问题是一个老问题,但如果有人遇到与我没有找到任何相关问题相同的问题,希望这个答案会有所帮助。

根据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

于 2021-10-12T03:24:47.830 回答