Nservicebus 在 web.config 中禁用默认记录器

Nservicebus disable default logger in web.config

我正在为 Nservicebus v5 使用 DefaultFactory LogManager。我对此很满意,但希望能够通过 web.config 禁用。

我使用 web.config 设置,如帮助文档中所述

<configSections>
    <section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" />
</configSections>
<Logging Threshold="Debug" />

我不想将阈值设置为致命阈值。我希望 "None" 或 Disabled="true"

也可以设置目录路径web.config?

更新:我们为什么要忽略错误?

简而言之,我们实际上没有对服务器的写入权限。

很长一段时间这不是 100% 正确。 我们的系统正在转向微服务,问题在于分散式日志记录是 tracing/visualization 的噩梦。 所以我们将流量跟踪、异常和有限跟踪转移到一个集中的系统中。

编程入口点(又名消息处理程序、web api 端点等)几乎总是包含在每个处理程序上抛出的 try catch 日志中,这涵盖了我们所有的编程错误。这与正常情况并没有什么不同。 集中式日志记录位置设置了人们可能希望的所有漂亮的红色闪烁实时警报。

这只留下配置类型错误,例如缺少队列、错误的程序集绑定、错误的配置文件或更多运行时风格的东西,如 IoC 连接(在处理程序代码之外)。 通过错误请求的集中日志记录和监控,可以很容易地检测到服务何时中断,如果是,我们将打开日志记录、重新启动、尝试故障问题并进行修复。 一旦它再次启动,有保证的交付将处理其他所有事情:D 150mb 日志文件分布在 10 个不同服务器上的日子已经一去不复返了。

DefaultFactory 的简单性很好,因为它不需要另一个 nuget 包和相关配置。

这是正确的前进方向吗?许多人会说不。 我们可以做得更好吗?是的,我们可以实现通用记录器接口并将其传递给 NServiceBus,但我们还没有安静下来,胜利并不重要 atm。

旁注:关于我们记录方式的一个非常好的事情是,在我们的后台工具中,我们能够简单地显示每个 "order" 的流程,类似于在 greylog 中使用相关 ID .

由于这不被认为是可能的情况,因此没有第一个 class API。但是您可以通过从任何常用日志记录库(NLog、Log4net、CommonLogging)传入空记录器来实现此目的。我假设您正在您的网站中使用其中之一。

以NLog为例

Install-Package NServiceBus.NLog

在你的网络配置中

<appSettings>
  <add key="disableLogging" value="true"/>
</appSettings>

然后在您的全球创业公司

    if (ConfigurationManager.AppSettings.Get("disableLogging") == "true")
    {
        LoggingConfiguration config = new LoggingConfiguration();
        LogManager.Configuration = config;
        NServiceBus.Logging.LogManager.Use<NLogFactory>();
    }

这是利用此处记录的方法 http://docs.particular.net/nservicebus/logging-in-nservicebus#nlog