我目前正在使用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,但我想知道是否有其他人想出了更好的主意。
答案 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);
}
即。可以传递上下文/特定于操作的日志。