在 serilog-timings 中记录 "begin" 事件
Logging the "begin" event in serilog-timings
Nicholas Blumhardt 的 Serilog timigs (or on the GitHub: serilog-timings) 是一个方便的工具,用于记录不同操作的持续时间。但是 - 至少据我所知 - 它设计用于仅在操作结束时进行记录(通过 Operation.Complete()
方法,或者由于异常而退出 using{} 块。由于嵌套操作结束于与开始顺序相反,当我们记录开始时,记录嵌套操作会更清楚。我想获得类似的日志项,可以通过以下代码实现:
using (var op = Operation.Begin("ended {OperationID}, {OperationName}, {User}", 123, "Main operation", "Benny Hill"))
{
Log.Information("started {OperationID}, {OperationName}, {User}", 123, "Main operation", "Benny Hill");
Log.Information("... some other log items....");
op.Complete("Returned", 1230);
}
,即结果应该是这样的:
不幸的是,上面的代码不太方便,因为必须将相同的属性赋予 Log.Informatrion()
,而这些属性已经赋予 Operation.Begin()
。在 Operation.Complete
以外的其他地方是否已经有使用这些参数的解决方案,或者我应该在 serilog-timings
中添加一个新方法(例如 Operaton.LogStart()
)?
SerilogTimings 不提供此功能,但您可以将其包装在您自己的扩展程序中:
using Serilog;
using SerilogTimings;
using SerilogTimings.Extensions;
class OperationEx
{
public static Operation Begin(string messageTemplate, params object[] args)
{
var op = Log.Logger.BeginOperation(messageTemplate, args);
Log.Logger.Information($"{messageTemplate} started", args);
return op;
}
}
(基于您的 PR 中的代码。)
然后在您的应用中:
using var op = OperationEx.Begin("Adding {Count} successive integers", count));
// .. as before
Nicholas Blumhardt 的 Serilog timigs (or on the GitHub: serilog-timings) 是一个方便的工具,用于记录不同操作的持续时间。但是 - 至少据我所知 - 它设计用于仅在操作结束时进行记录(通过 Operation.Complete()
方法,或者由于异常而退出 using{} 块。由于嵌套操作结束于与开始顺序相反,当我们记录开始时,记录嵌套操作会更清楚。我想获得类似的日志项,可以通过以下代码实现:
using (var op = Operation.Begin("ended {OperationID}, {OperationName}, {User}", 123, "Main operation", "Benny Hill"))
{
Log.Information("started {OperationID}, {OperationName}, {User}", 123, "Main operation", "Benny Hill");
Log.Information("... some other log items....");
op.Complete("Returned", 1230);
}
,即结果应该是这样的:
不幸的是,上面的代码不太方便,因为必须将相同的属性赋予 Log.Informatrion()
,而这些属性已经赋予 Operation.Begin()
。在 Operation.Complete
以外的其他地方是否已经有使用这些参数的解决方案,或者我应该在 serilog-timings
中添加一个新方法(例如 Operaton.LogStart()
)?
SerilogTimings 不提供此功能,但您可以将其包装在您自己的扩展程序中:
using Serilog;
using SerilogTimings;
using SerilogTimings.Extensions;
class OperationEx
{
public static Operation Begin(string messageTemplate, params object[] args)
{
var op = Log.Logger.BeginOperation(messageTemplate, args);
Log.Logger.Information($"{messageTemplate} started", args);
return op;
}
}
(基于您的 PR 中的代码。)
然后在您的应用中:
using var op = OperationEx.Begin("Adding {Count} successive integers", count));
// .. as before