Azure ServiceFabric 示例未记录到 ETW
Azure ServiceFabric samples not logging to ETW
我是 运行 ServiceFabric(预览版 1.4.87)的第一个示例:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-create-your-first-application-in-visual-studio/,用于创建有状态服务,尽管示例 运行 正确,我在诊断中没有看到 ETW 输出日志信息 window。
对日志的调用是对 ServiceEventSource.Current.ServiceMessage(...)
进行的,但是当此方法(在 ServiceEventSource.cs 中实现)运行时,对 this.IsEnabled()
returns 的调用为 false,因此没有诊断被写。如果我绕过调试中的 IsEnabled()
调用,仍然没有任何内容写入诊断 window,它只包含应用程序的启动消息。
诊断中配置的提供程序是默认的:
Microsoft-ServiceFabric-Actors
Microsoft-ServiceFabric-Services
cbd93bc2-71e5-4566-b3a7-595d8eeca6e8:5:0x4000000000000000
我已将 Microsoft-ServiceFabric 添加到此列表,但这只会让我记录更多日志,但仍然不是我的输出消息。
我还 运行 PerfView,然后查看可用的提供程序,上面的前两个不存在:Microsoft-ServiceFabric-Actors 和 Microsoft-ServiceFabric-Services。
有什么想法吗?这似乎是纯粹的 ETW 问题或设置中的某种 ServiceFabric 错误,诊断中的提供程序规范可能不正确 window。
我是 运行 Win10,VS2015 Enterprise x64。
[编辑]
Program.cs 中的调用 ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(MyStatefulService).Name)
也没有写出任何内容。我仅有的消息是:
Service Created: Service fabric:/MyApplication/MyStatefulService partition 9505f2b3-dee5-4ea7-96b7-c861407b5283 of ServiceType MyStatefulServiceType created in Application fabric:/MyApplication ApplicationType MyApplicationType.
RunAsync has been invoked for a stateful service replica. Application Type Name: MyApplicationType, Application Name: fabric:/MyApplication, Service Type Name: MyStatefulServiceType, Service Name: fabric:/MyApplication/MyStatefulService, Partition Id: 9505f2b3-dee5-4ea7-96b7-c861407b5283, Replica Id: 130996049833056865",
The Resource Balancer completed the Creation phase and consequently issued the action -- Add on Service -- fabric:/MyApplication/MyStatefulService Partition -- 9505f2b3-dee5-4ea7-96b7-c861407b5283 with (if relevant) SourceNode -- N/A and TargetNode -- Node.2.
(对其他节点重复)
要查看来自 EventSource 的事件,您需要将其名称添加到 Diagnostics window 中的提供者列表中。查看 ServiceEventSource 定义,它上面会有一个 [EventSource(Name="xxx")] 属性。那就是您需要在提供商列表中的名称 ('xxx')。
Visual Studio 通常会在启动 Diagnostics Windows 时自动检测解决方案中的 EventSources;不确定为什么它对您不起作用,但手动添加应该可以解决问题。
我在重组我的解决方案后遇到了这个问题。我将我的服务项目移到了一个解决方案文件夹中。那就是 Diagnostics Events Viewer 停止接收来自我的服务的消息的时候。
将项目移回解决方案的根级别后 Visual Studio 会自动将事件源名称添加到 ETW 提供程序列表中。
此错误现在似乎已通过 VS 2017 and/or Azure Service Fabric SDK 2.5.216.0 修复。
我是 运行 ServiceFabric(预览版 1.4.87)的第一个示例:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-create-your-first-application-in-visual-studio/,用于创建有状态服务,尽管示例 运行 正确,我在诊断中没有看到 ETW 输出日志信息 window。
对日志的调用是对 ServiceEventSource.Current.ServiceMessage(...)
进行的,但是当此方法(在 ServiceEventSource.cs 中实现)运行时,对 this.IsEnabled()
returns 的调用为 false,因此没有诊断被写。如果我绕过调试中的 IsEnabled()
调用,仍然没有任何内容写入诊断 window,它只包含应用程序的启动消息。
诊断中配置的提供程序是默认的:
Microsoft-ServiceFabric-Actors
Microsoft-ServiceFabric-Services
cbd93bc2-71e5-4566-b3a7-595d8eeca6e8:5:0x4000000000000000
我已将 Microsoft-ServiceFabric 添加到此列表,但这只会让我记录更多日志,但仍然不是我的输出消息。
我还 运行 PerfView,然后查看可用的提供程序,上面的前两个不存在:Microsoft-ServiceFabric-Actors 和 Microsoft-ServiceFabric-Services。
有什么想法吗?这似乎是纯粹的 ETW 问题或设置中的某种 ServiceFabric 错误,诊断中的提供程序规范可能不正确 window。
我是 运行 Win10,VS2015 Enterprise x64。
[编辑]
Program.cs 中的调用 ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(MyStatefulService).Name)
也没有写出任何内容。我仅有的消息是:
Service Created: Service fabric:/MyApplication/MyStatefulService partition 9505f2b3-dee5-4ea7-96b7-c861407b5283 of ServiceType MyStatefulServiceType created in Application fabric:/MyApplication ApplicationType MyApplicationType.
RunAsync has been invoked for a stateful service replica. Application Type Name: MyApplicationType, Application Name: fabric:/MyApplication, Service Type Name: MyStatefulServiceType, Service Name: fabric:/MyApplication/MyStatefulService, Partition Id: 9505f2b3-dee5-4ea7-96b7-c861407b5283, Replica Id: 130996049833056865",
The Resource Balancer completed the Creation phase and consequently issued the action -- Add on Service -- fabric:/MyApplication/MyStatefulService Partition -- 9505f2b3-dee5-4ea7-96b7-c861407b5283 with (if relevant) SourceNode -- N/A and TargetNode -- Node.2.
(对其他节点重复)
要查看来自 EventSource 的事件,您需要将其名称添加到 Diagnostics window 中的提供者列表中。查看 ServiceEventSource 定义,它上面会有一个 [EventSource(Name="xxx")] 属性。那就是您需要在提供商列表中的名称 ('xxx')。
Visual Studio 通常会在启动 Diagnostics Windows 时自动检测解决方案中的 EventSources;不确定为什么它对您不起作用,但手动添加应该可以解决问题。
我在重组我的解决方案后遇到了这个问题。我将我的服务项目移到了一个解决方案文件夹中。那就是 Diagnostics Events Viewer 停止接收来自我的服务的消息的时候。
将项目移回解决方案的根级别后 Visual Studio 会自动将事件源名称添加到 ETW 提供程序列表中。
此错误现在似乎已通过 VS 2017 and/or Azure Service Fabric SDK 2.5.216.0 修复。