C# 记录和积累来自不同服务器的异常的最佳方法是什么?

C# 记录和积累来自不同服务器的异常的最佳方法是什么?,c#,exception,asp.net-web-api,logging,nlog,C#,Exception,Asp.net Web Api,Logging,Nlog,目前,我们在不同的物理服务器上有一些WebApi应用程序实例。有时,会发生一些异常,降低服务质量。由于异常会登录到服务器本身,我们需要单独检查它们,因此需要一段时间才能意识到问题 为了收集所有异常,我考虑了异常过滤器,但是我们有一些try/catch,没有重新触发异常,所以我们丢失了一些异常。 我还考虑了FirstChanceException事件,第一次记录所有异常。 为了在一个地方积累异常,我考虑了Nlog,并使用了一个共享文件夹。 它们是好方法吗?有没有更好的方法或开源库来解决这些问题 我

目前,我们在不同的物理服务器上有一些WebApi应用程序实例。有时,会发生一些异常,降低服务质量。由于异常会登录到服务器本身,我们需要单独检查它们,因此需要一段时间才能意识到问题

为了收集所有异常,我考虑了异常过滤器,但是我们有一些try/catch,没有重新触发异常,所以我们丢失了一些异常。 我还考虑了FirstChanceException事件,第一次记录所有异常。 为了在一个地方积累异常,我考虑了Nlog,并使用了一个共享文件夹。 它们是好方法吗?有没有更好的方法或开源库来解决这些问题

我想将所有服务器中的所有异常(无论它们是否处理)累积到一个地方,以便快速检查和处理。

多亏了,我终于想出了这个解决方案

我利用查找我的应用程序中的所有异常

static void Main()
{
    AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
}

static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
{

}
然后将它们发送到,这是一个开源的时间序列数据库

var payload = new LineProtocolPayload();
const string measurement = "logs";
var memoryLoad = new LineProtocolPoint(measurement,
     new Dictionary<string, object>
     {
         {"message", e.Exception?.Message,},
     },
     new Dictionary<string, string>
     {
         {"host", Environment.GetEnvironmentVariable("COMPUTERNAME")},
         {"app", "{my app name}"},
     },
     DateTime.UtcNow);
payload.Add(memoryLoad);       
var influxResult = Client.WriteAsync(payload, ct).Result;
var payload=newlineprotocolpayload();
const string measurement=“logs”;
var memoryLoad=新的LineProtocolPoint(测量,
新词典
{
{“消息”,例如异常?.message,},
},
新词典
{
{“host”,Environment.GetEnvironmentVariable(“COMPUTERNAME”)},
{“应用程序”,{my app name}},
},
DateTime.UtcNow);
有效载荷。添加(memoryLoad);
var influxResult=Client.WriteAsync(有效负载,ct).Result;
最后,我在中展示了结果,这是最终结果


这太宽泛了-几乎和设计数据库、农场或应用程序一样宽泛。这取决于很多因素——实际的业务需求、环境,以及您是否希望将其用于操作、管理或开发人员调试(不同的场景具有非常不同的延迟、详细的需求)。如果站点关闭,您希望尽快通知操作员。本地日志库没有解决这些问题-根据定义,它们只在本地进行日志记录。您可以使用eg Application Insights获得监控和详细诊断,即使在免费层中也是如此。或者,您可以利用Windows事件日志的推送订阅来快速记录本地事件(比任何日志库都快得多),并将它们传播到中央服务器。或者,您可以使用这样的库来收集日志和度量,并将它们推送到时间序列数据库,如Influx或a。事实上,最好检查Logary和Azure AppInsights,即使您最终没有使用它们。它们展示了所涉及的问题、度量、操作消息和详细日志之间的差异。Azure AppInsights、Google Stackdriver或CloudWatch等基于云的服务允许您快速开始度量和日志分析。这里的问题是一个问题会导致多个错误日志吗?不,问题是当QoS下降时,我们发现错误日志太晚了。