我想拥有有关以下信息的特殊性能日志: 一行http请求
我现在正在使用serilog记录未处理的异常。在哪里添加这种日志插入的理想位置或最佳实践是什么?将日志存储到数据库中是个好习惯吗?
答案 0 :(得分:2)
中间件方法似乎可行。
public class PerformanceMiddleware
{
private readonly RequestDelegate next;
private readonly IConfiguration _configuration;
private readonly ILogger _logger;
public PerformanceMiddleware(RequestDelegate next, IConfiguration configuration, ILogger<PerformanceMiddleware> logger)
{
_configuration = configuration;
_logger = logger;
this.next = next;
}
public async Task Invoke(HttpContext context)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
await next.Invoke(context);
stopwatch.Stop();
try
{
using (var conn = new SqlConnection(_configuration.GetConnectionString("DefaultConnection")))
using (var command = new SqlCommand("dbo.usp_insertPerformance", conn) { CommandType = CommandType.StoredProcedure })
{
conn.Open();
// set parameters
command.ExecuteNonQuery();
}
}
// We dont want show this error to user.
catch (Exception ex)
{
_logger.LogError(ex, "Error in PerformanceMiddleware database operation.");
}
}
}
答案 1 :(得分:1)
如果您想简化它并使用自己的解决方案,则可以为asp.net核心管道编写一个Middleware来跟踪所需的数据。
我不建议使用Serilog保留收集的信息。 Serilog是一个日志记录框架,不应用于跟踪应用程序指标。
直接使用数据库(sql,mongo等)存储和分析数据。您已经在问题中定义了对象模型,因此应该很容易在数据库中创建模型实例并将其持久化。
答案 2 :(得分:0)
为什么不使用APM工具或跟踪工具来执行此操作,而只创建包含数据的日志,这些数据不允许您实际识别和解决问题。 APm工具不仅可以记录性能数据,还可以提供更多的价值,但可以帮助您解决问题。该领域的领导者是AppDynamics,New Relic和Dynatrace。有很多开源工具也可以在这里提供帮助,例如Zipkin,Jaeger和Skywalking。您可能也想解释应用程序的体系结构和语言:)