Serilog Timing Rollup建议或想法

时间:2014-11-11 06:01:11

标签: stopwatch serilog

我目前正在使用Serilog进行应用程序,并使用Timing extra监视某些性能,而后者依次使用loggly接收器。

我喜欢我所获得的洞察力,但我正在寻找一种方法来轻松汇总或分离出不同的时间。

目前我有这样的时机:

using (_logger.BeginTimedOperation("Processing Sync Event"))
{
    MethodA();
    MethodB();
}

void MethodA()
{
    using(_logger.BeginTimedOperation("Processing MethodA"))
    {
    }
}

void MethodB()
{
    using(_logger.BeginTimedOperation("Processing MethodB"))
    {
    }
}

我想过可能会在某种程度上使用标识符将它们联系在一起,或者根据我在loggly中看到的内容,轻松排除孩子/父母。当然我可以简单地排除TimedOperationDescription,但我想知道是否有其他人想出了更好的主意。

1 个答案:

答案 0 :(得分:2)

这是一个选项:

var id = Guid.NewGuid();
using (LogContext.PushProperty("Operation", id))
using (_logger.BeginTimedOperation("Processing sync event", identifier: id.ToString())
{
    MethodA();
    MethodB();
}

这取决于如此启用LogContext

var log = new LoggerConfiguration()
    .Enrich.FromLogContext()
    ...

LogContext具有隐式执行其他日志语句的优点。如果你宁愿避免它并使用显式记录器实例,你可以尝试:

var id = Guid.NewGuid();
var opLog = _logger.ForContext("Operation", id);
using (opLog.BeginTimedOperation("Processing sync event")
{
    MethodA(opLog);
    MethodB(opLog);
}

即。可以传递上下文/特定于操作的日志。