如何在不重新启动服务的情况下在企业库中打开和关闭跟踪?

How do can I turn a trace on and off in enterprise library without restarting the service?

所以在我们的项目中,我们有企业库作为我们的记录器。显然,在生产中,我们不希望我们的调试跟踪一直注销,但我们希望能够在不重新启动应用程序池的情况下打开该调试跟踪,但我不太确定如何去做。

在过去,我会写一些东西,只有在文件存在时才会记录到文件中。因此,例如,如果我想启用调试跟踪,我会让 NOC 在日志文件夹中放置一个文件,然后在下次调用记录器时,它会看到该文件在那里并开始转储到它。看起来有点俗气,但它确实有效。然而,对于一个网站,我必须编写一个完整的异步记录器,它知道如何将要写入的信息排队,但我真的不想这样做,而且我不知道如何使用 Enterprise 实现这一点记录器。关于这个的任何想法都会很棒。

另一个想法是在配置文件或注册表中有一个标志,可以在站点处于 运行 时更改,这将启用相同的跟踪。

我正在寻找想法或解决方案。主要问题是我们需要能够即时启用和禁用此日志记录。

所以我无法找到使用 EnterpriseLibrary 执行此操作的内置解决方案,所以这就是我最终所做的并且它似乎有效;事实上,我通过添加优先级覆盖检查进一步扩展了这个想法。

我创建了一个代理 class 用于写入 EL LogWriter。它所做的是检查文件是否存在(在本例中为 priority_override.txt)。如果文件存在,它将读取文件并搜索文本 PriorityLevel={n},其中 n 是覆盖。如果它能够获得此覆盖编号,它将覆盖代码中提供的优先级。我使用它基本上强制所有日志语句具有高优先级,这样它们就不会被过滤器阻止。

我的默认过滤器会阻止优先级低于 5 的任何内容进入听众;这个技巧允许我通过临时增加所有 logs.So 的优先级来覆盖它,因为调试通常是优先级 1,它不会被记录。如果我在名为 priority_override.txt 的日志目录中放置一个文件,其中包含内容 PriorityLevel=99,那么所有日志语句都会进入配置的侦听器并进行相应处理。其他一切都只是使用适当的类别和优先级等配置 EL 的正常问题。因此,例如,如果我的最高优先级是 5 并且触发电子邮件,那么我会将其覆盖为 4,以便记录所有内容但电子邮件不会被发送。然后,当我们在生产中完成故障排除时,例如,我们只需删除 priority_override.txt 和所有 returns 即可正常。

此外,现在我们不必为测试环境单独管理配置文件的更改。我们可以将 priority_override.txt 保留在每个相应环境的日志文件夹中。