2013-08-01 79 views
3

如何禁用所有Quickfix/n的日誌和文件工廠?我想處理所有的日誌記錄和消息發送,因爲我不喜歡Quickfix如何記錄消息的方式,這意味着我想確定日誌記錄消息的發生時間和方式。有沒有辦法徹底禁用任何基於屏幕或基於文件的日誌記錄?Quickfix/n,如何禁用存儲和日誌工廠?

感謝

回答

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

老問題,但可能用於搜索此人的人。

如果你想更輕鬆地啓用/禁用日誌記錄,我覺得這是更好的設置在插座引發劑類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}