1

我实现了一个用于记录事件的事件源类。在反复更改记录事件的一种方法的签名(参数名称和参数类型)后,不再正确记录事件。例如,当记录事件时,不是使用当前参数名称设置有效负载,而是使用用于该方法的先前版本的参数记录事件。例如:

方法的版本 n:

    [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:

    [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 再次测试,日志仍然显示不正确。看起来问题不在于记录事件,而在于阅读它们。

4

2 回答 2

5

我猜想事件源没有发布清单更改,或者 SLAB 没有识别这些更改。

请注意,仅通过更改看似违反事件源版本控制规则的参数名称:“一旦添加具有特定负载属性集的事件,就无法重命名事件、删除任何属性或更改现有属性的含义。” 但是,我可以看到,在接口正式化之前的开发中,这仍然会导致问题。

您还可以检查位于 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。

如果您在缓存中看到清单,您可以将其删除以查看是否有助于获取最新更改。

于 2015-07-09T17:53:39.993 回答
0

我们遇到了同样的问题。我们通过为每个新部署重新命名 EventSource 并在其末尾添加版本号来“解决”它。我确信这将在某个阶段得到解决。

于 2014-09-15T19:24:43.590 回答