Quickfix / n,如何禁用存储和日志工厂?

时间:2013-08-01 07:29:57

标签: c# logging quickfix fix-protocol

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

由于

2 个答案:

答案 0 :(得分: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版本将包含一个空工厂或其他东西来填补这个空白。

答案 1 :(得分:1)

旧问题,但可能对搜索此内容的人有用。

如果您想更容易启用/禁用日志记录,我认为在app.config文件中设置一个值并在套接字启动程序类中处理它会更好:

<强>的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}