我希望在一行中有关于http请求的特殊性能日志。
我现在使用serilog记录未处理的异常。哪里是添加这种日志插入的理想位置,或者什么是最佳实践?将日志存储到数据库中是一个很好的实践吗?
发布于 2018-07-11 05:31:07
如果您希望它简单,并且使用您自己的解决方案,您可以为asp.net核心管道编写一个跟踪所需数据的asp.net。
我不建议使用Serilog来保存所收集的信息。Serilog是一个日志框架,不应该用于跟踪应用程序度量。
直接使用数据库(sql、mongo等)来存储和分析你的数据。您已经在问题中定义了对象模型,因此您应该很容易在数据库中创建并持久化您的模型的实例。
发布于 2018-07-12 08:45:27
中间件方法似乎起作用了。
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.");
}
}
}发布于 2018-07-11 16:48:49
为什么不使用APM工具或跟踪工具来实现这一点,而不是仅仅使用不允许您实际识别和解决问题的数据创建日志。APm工具提供了更多的价值,而不仅仅是记录性能数据,而是使您能够解决问题。这一领域的领军人物是AppDynamics、New和Dynatrace。这里也有许多开源工具,比如Zipkin、Jaeger和Skywalking。你可能也想解释一下你的应用程序的架构和语言:)
https://stackoverflow.com/questions/51271761
复制相似问题