2014-07-21 18 views
1

我實現了用於記錄事件的事件源類。在重複更改記錄事件的一種方法的簽名(參數名稱和參數類型)後,事件不再被正確記錄。例如,當記錄一個事件時,不是使用當前參數名稱設置Payload,而是使用用於該方法以前版本的參數記錄事件。例如:SLAB,out-of-process:更改事件源方法的簽名會導致不正確的事件記錄

[Event(5, Message = "Action: {0}", 
    Task = Tasks.PAGE, 
    Keywords = Keywords.USER_ACTION, 
    Level = EventLevel.Informational)] 
    public void LogAction(string action, string paramName) 
    { 
     this.WriteEvent(5, action, paramName); 
    } 

方法的版本N + 1:該方法的

版本N

[Event(5, Message = "Action: {0}", 
    Task = Tasks.PAGE, 
    Keywords = Keywords.USER_ACTION, 
    Level = EventLevel.Informational)] 
    public void LogAction(string action, string newParamName) 
    { 
     this.WriteEvent(5, action, newParamName); 
    } 

當這個方法被稱爲用於記錄的事件,它們被記錄設定載荷值使用參數名稱paramName而不是newParamName。

現在,問題是:如何清除「緩存」,以便系統忘記舊版本的方法,並且新方法可以正確記錄事件? LE:我使用PerfView測試了日誌記錄。有趣的是,它正確地讀取日誌。我再次使用SemanticLogging-svc.exe進行測試,日誌仍然顯示不正確。看起來問題不在記錄事件,而在於閱讀它們。

回答

0

我們遇到了同樣的問題。我們通過爲每個新部署重新命名EventSource來爲其解決方案,在其末尾添加版本號。我相信這是一些將在某個階段得到解決的問題。

5

我會猜測事件源不會發布清單更改或SLAB無法識別更改。

請注意,通過只更改看起來違反事件源版本規則的參數名稱:"Once you add an event with certain set of payload properties, you cannot rename the event, remove any properties, or change the meaning of the existing properties."但是,我可以看到,在開發接口正式化之前,這仍然可能導致問題。

您還可以檢查Path.GetTempPath()\ 7D2611AE-6432-4639-8B91-3E46​​EB56CADF \文件夾中的清單架構緩存文件夾。例如C:\ Users \\ AppData \ Local \ Temp \ 7D2611AE-6432-4639-8B91-3E46​​EB56CADF或C:\ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ Temp \ 7D2611AE-6432-4639-8B91-3E46​​EB56CADF。

如果您在緩存中看到您的清單,您可以刪除它以查看是否有助於獲取最新更改。

相關問題