1

我目前正在检测一个应用程序,该应用程序使用 Serilog 并使用 Timing extra 监视一些性能,而 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,但我想知道是否有其他人想出了更好的主意。

4

1 回答 1

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);
}

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

于 2014-11-11T19:51:37.243 回答