记录和累积来自不同服务器的异常的最佳方法是什么?
What is the best way to log and accumulate exceptions from different servers?
目前,我们在不同的物理服务器上有几个 WebApi 应用程序实例。有时,会发生一些异常并降低服务质量。由于异常是自己登录服务器的,需要我们逐一检查,需要一段时间才能发现问题。
为了收集所有异常,我考虑了异常过滤器,但我们有一些 try/catch 没有重新抛出异常,所以我们丢失了一些异常。
我还考虑了 FirstChanceException 事件,以在第一次机会时记录所有异常。
为了在一个地方累积异常,我考虑了 Nlog,并使用共享文件夹。
它们是好的方法吗?有更好的方法或开源库吗?
我想将所有服务器的所有异常(无论它们是否处理)累积到一个地方以便快速检查和处理。
感谢 Panagiotis Kanavos,我终于想出了这个解决方案。
我利用 AppDomain.FirstChanceException Event 在我的应用程序中查找所有异常。
static void Main()
{
AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
}
static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
{
}
然后将它们发送到 InfluxDB,这是一个开源时间序列数据库。
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;
最后,我在Grafana中展示了结果,这就是最终结果。
目前,我们在不同的物理服务器上有几个 WebApi 应用程序实例。有时,会发生一些异常并降低服务质量。由于异常是自己登录服务器的,需要我们逐一检查,需要一段时间才能发现问题。
为了收集所有异常,我考虑了异常过滤器,但我们有一些 try/catch 没有重新抛出异常,所以我们丢失了一些异常。 我还考虑了 FirstChanceException 事件,以在第一次机会时记录所有异常。 为了在一个地方累积异常,我考虑了 Nlog,并使用共享文件夹。 它们是好的方法吗?有更好的方法或开源库吗?
我想将所有服务器的所有异常(无论它们是否处理)累积到一个地方以便快速检查和处理。
感谢 Panagiotis Kanavos,我终于想出了这个解决方案。
我利用 AppDomain.FirstChanceException Event 在我的应用程序中查找所有异常。
static void Main()
{
AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
}
static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
{
}
然后将它们发送到 InfluxDB,这是一个开源时间序列数据库。
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;
最后,我在Grafana中展示了结果,这就是最终结果。