问题标签 [slab]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
124 浏览

c# - 我可以添加新版本的事件方法并使用相同的事件 ID 吗?

关于版本控制,语义日志记录应用程序块的文档建议:

如果确实需要修改 EventSource 类,则应将更改限制为添加方法以支持新的日志消息,以及添加现有方法的重载(这将具有新的事件 ID)。您不应删除或更改现有方法的签名。

假设我有以下 EventSource 类:

然后我想添加对记录查询字符串的支持。我可以添加具有相同 ID 的重载方法吗?

如何在对应用程序或进程外主机日志记录应用程序影响最小的情况下支持未来的修改?

我可以通过在模型类中进行添加来简化签名吗?

我不太确定 Event ID 适合这一切的位置,以及EventSource类的维护需要多少注意这一点。

0 投票
2 回答
396 浏览

slab - 为什么 SLAB SqlDatabaseSink 停止写入 Traces 表?

SLAB SqlDatabaseSink 停止写入 Traces 表

我并行添加了一个 FlatFileSink 以确保侦听器不是问题,它可以很好地写入文件。我还有一个工作正常的 SqlDatabaseSink 单元测试,但是当通过 Global.asax 从主项目订阅时,只有 FlatFileSink 工作。截图如下。

根据@manikrish 的建议添加了 SLAB 内部事件侦听器(非常感谢),这是来自该日志的底层 SQLDatabaseSink 错误“无法加载文件或程序集'Newtonsoft.Json,版本 = 4.5.0.0,文化 = 中性, PublicKeyToken=30ad4fe6b2a6aeed'" - 详情如下,SLAB 内部日志。

接下来,我比较了主项目和单元测试项目(谁的 SQLDatabaseSink 工作)之间的 Newtonsoft.Json 的引用属性,两者都使用版本 6.0.8(我相信 WebApi 5.2.3 附带它),但注意到特定版本在后者。所以,我在主项目中做了同样的改变仍然没有运气

此外,主项目的 web.config 和单元测试项目的 app.config 也具有相同的程序集绑定:

接下来,我尝试通过更改 web.config、packages.config、csproj 中的引用属性来解决绑定重定向问题;基于其他stackoverflow问题(下面的链接)重新安装/更新Newtonsoft.Json以及调用程序集的(Microsoft.Practices.EnterpriseLibrary.SemanticLogging)NuGet包,仍然没有运气- SLAB内部日志中的相同绑定错误,没有证据我的投标重定向。

SLAB 内部日志:

StackOverflow 支持链接:

臭名昭著的程序集绑定错误

无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一。清单定义与程序集引用不匹配

使用多个项目时出现 Newtonsoft.Json.dll 问题

尽管有程序集重定向并加载了正确的版本,但程序集不匹配

截图: Global.asax SLAB 配置调用

平板配置

项目中的 NuGet SLAB 包

0 投票
1 回答
315 浏览

azure - MVC Azure Webapp 的语义日志记录 (SLAB)

我正在尝试为我的 Azure Web 应用程序(进行中)实现 SLAB,而我的侦听器是 Azure 表存储(表连接字符串),我面临的问题是 -“EventSource.IsEnabled() = 总是返回 false”(我正在从VS2013 带 IIS express)

我的代码

————global.asax

———-事件源

0 投票
2 回答
473 浏览

c# - `IDictionary 类型的最后一个参数的目的是什么`EventListener.EnableEvents`方法中的`?

我试图弄清楚方法中的最后一个参数 ( IDictionary<String, String>)如何EventListener.EnableEvents(EventSource, EventLevel, EventKeywords, IDictionary<String, String>)影响方法的行为。

我检查了MSDN 文档,但描述不清楚,也没有示例如何使用它。事件的参数是什么?它们是如何在字典中指定的?如果有人能举个例子,那就完美了。

0 投票
1 回答
665 浏览

.net - “EventSourceException”,每个日志都没有详细信息,但日志本身仍然通过

所以我正在使用 SLAB 并且我有一个数据库侦听器注销到数据库。我正在事件源上使用单一方法进行测试。我遇到的问题是日志正按我的意愿插入到数据库中,但我在每个条目之前都会收到一个异常日志

在此处输入图像描述 在我的输出窗口中,它说的完全一样,“EventSourceException”。我很难弄清楚异常是什么,更不用说如何修复它了。

这是事件源方法:

这是监听器的初始化方式,inproc:

以及对记录器的调用:

关于问题可能是什么或至少如何获得引发的实际异常的任何想法?

未显示的其他位

  • 这个 EventSource 类是密封的
  • 我已经逐步完成并验证了这些方法GetNewActivityId()并且GetRequestId()没有抛出异常
  • 执行时异常显示在输出窗口中,WriteEventWithRelatedActivityId(...但异常没有冒泡;它似乎在基类中处理。
0 投票
2 回答
708 浏览

c# - 如何使用语义日志记录应用程序块 (SLAB) 在 C# 中基于级别配置多个接收器(进程内)

当设置语义日志应用程序块 (SLAB) 以使用多个接收器(例如平面文件和滚动文件)时,它不会根据我的逻辑级别写入每个接收器;我试图理解为什么。我可以让它基于关键字而不是基于 EventLevel 写入不同的接收器。

我希望一个接收器获取所有日志,另一个接收器仅获取警告级别(或最差)的日志。当我定义 2 个侦听器时,一个接收器的级别为“EventLevel.LogAlways”,另一个接收器的级别为“EventLevel.Warning”,我没有收到任何日志记录条目。(我定义了一个 EventSource 方法,其 EventLevel 为 Verbose,并期望从使用 EventLevel.LogAlways 定义的侦听器中查看日志记录)

贝娄是我试图实现的逻辑(如果这还不够逻辑,请告诉我,我会相应地更新):

1) 下面以aExpense为例,这就是在我的 Application_Start 中定义监听器的方式:

2)写日志是这样完成的:

3) ApplicationStarting() 的 AExpenseEvents (EventSource) 方法是:

0 投票
3 回答
368 浏览

c# - 是否可以让 SLAB 与 Microsoft.Diagnostics.Tracing.EventSource 一起使用?

官方发布说明说:

改进了与 EventSource nuget 包的兼容性

  • SLAB 的源必须更新和重建才能与 EventSource nuget 包(支持通道,但不支持采样)一起使用。这个过程现在相当轻松。
    • 向所有项目添加了对 EventSource nuget 包的引用
    • 在所有源文件中更改System.Diagnostics.TracingMicrosoft.Diagnostics.Tracing
    • 在单元测试项目中定义了 EVENT_SOURCE_PACKAGE 常量(以禁用可能无法使用 nuget 版本的测试)。

这有点神秘。Microsoft.Diagnostics.Tracing有些东西似乎倒退了,因为我在 Nuget 下载中根本看不到任何引用。

或者是你必须做的子项目来构建它(所以它应该说,添加、更改、定义而不是添加、更改、定义)?

嗯,这些说明(如果它们是说明)是不够的:

  • Microsoft.Diagnostics.Tracing已经引用了三个地方,因此会给出重复的警告
  • Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Etw.Configuration.EventSourceSettings在(这是一个类)和Microsoft.Diagnostics.Tracing.EventSourceSettings(这是一个枚举)之间有多个地方出现歧义。
0 投票
1 回答
335 浏览

c# - 没有在单个服务器上向 SemanticLogging 服务注册事件

我正在尝试从 Enterprise Library Semantic Logging Application Block 获取 SemanticLogging-svc.exe 来监听我的自定义事件源的事件并将它们转储到控制台。

这适用于我的本地主机和开发服务器,但我没有得到生产服务器的任何输出。所以我正在寻找为什么会这样的答案。

控制台输出很简单:

我的 SemanticLogging-svc.xml 看起来像这样:

Windows 事件日志中没有事件。

我也尝试过使用 rollingFlatFileSink。这会在生产服务器上产生一个空文件,但可以在其他系统上运行。

查看 PerfMon > Data Collector Sets > Event Trace Sessions,我看到 Microsoft-SemanticLogging-Etw-ConsoleEventSink 正在运行。

使用 PerfView,我的事件被正确收集。

有问题的服务器是较旧的服务器,运行 Windows Server 2008 R2。

是否有一些我遗漏的设置,或者是否有人对为什么这不起作用有另一种解释?

提前致谢。

0 投票
2 回答
1671 浏览

c# - 语义记录 IsEnabled si 总是假的?

我正在使用 SLAB 进程外在我的应用程序中记录 ETW 事件。

今天我在 WcfTestClient.exe 下托管的 WCF 服务中遇到问题

当我在 EventSource 继承类的 WriteEvent 方法中设置断点时,IsEnabled() 返回 false !!!所以没有事件被写入我的控制台日志进程外:(

启动 ConsoleEventSink 时,我可以看到我的 eventSource 注册了 LogAlways 级别,而 MatchAnyKeyword 属性为 None

有什么想法可以检查这个问题有什么问题吗?

提前致谢

0 投票
2 回答
406 浏览

.net - 如何在尝试为侦听器设置 Azure 接收器时跟踪异常源

我正在尝试使用Semantic Logging Application Block将日志存储到Azure Table Storage. 设置:

我遇到了一个奇怪的例外:

抛出异常:Microsoft.Practices.EnterpriseLibrary.SemanticLogging.WindowsAzure.dll 中的“System.MissingMethodException”

附加信息:找不到方法:'无效 Microsoft.WindowsAzure.Storage.Table.CloudTableClient.set_RetryPolicy(Microsoft.WindowsAzure.Storage.RetryPolicies.IRetryPolicy)'。

我的真实账户也有同样的问题。包版本(全部来自 NuGet):

  • EnterpriseLibrary.SemanticLogging — 2.0.1406.1
  • EnterpriseLibrary.SemanticLogging.WindowsAzure — 2.0.1406.1
  • WindowsAzure.Storage — 7.0.0

如何跟踪异常的来源?谷歌对未找到的方法只字未提。在您的机器上测试的项目在这里