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

C# 如何在不重新启动服务的情况下打开和关闭企业库中的跟踪?,c#,asp.net-mvc-4,enterprise-library,C#,Asp.net Mvc 4,Enterprise Library,所以在我们的项目中,我们有企业库作为我们的记录器。显然,在生产环境中,我们不希望调试跟踪总是注销,但我们希望能够在不重新启动应用程序池的情况下打开调试跟踪,但我不太确定如何进行 在过去,我会写一些只有在文件存在的情况下才会登录到该文件的东西。例如,如果我想启用调试跟踪,我会让NOC在日志文件夹中放置一个文件,然后下次调用记录器时,它会看到文件在那里并开始转储到它。看起来有点俗气,但很管用。然而,对于一个网站,我必须编写一个完整的异步记录器,它知道如何将要编写的信息排队,我真的不想这样做,我也不知

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

在过去,我会写一些只有在文件存在的情况下才会登录到该文件的东西。例如,如果我想启用调试跟踪,我会让NOC在日志文件夹中放置一个文件,然后下次调用记录器时,它会看到文件在那里并开始转储到它。看起来有点俗气,但很管用。然而,对于一个网站,我必须编写一个完整的异步记录器,它知道如何将要编写的信息排队,我真的不想这样做,我也不知道如何使用Enterprise logger实现这一点。这方面有什么好主意就好了

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


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

因此,我无法找到一个内置的解决方案来使用EnterpriseLibrary实现这一点,所以这就是我最终要做的,而且它似乎可以工作;事实上,我通过添加优先级覆盖检查进一步扩展了这个想法

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

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

此外,现在我们不必为测试环境单独管理配置文件的更改。我们只需将
priority\u override.txt
保留在各个环境的日志文件夹中即可