使用Serilog记录通用对象

时间:2014-11-30 03:57:34

标签: serilog

是否可以登录传入参数是通用的方法?例如

public async Task<TResult> Handle(TQuery query)
{
    var watch = Stopwatch.StartNew();
    var result = await _handler.Handle(query);
    watch.Stop();
    Serilog.Log.Logger.Information("Processed {@" + query.GetType().Name + "} in {Elapsed} ms",
        query.GetType().Name, watch.ElapsedMilliseconds);
    return result;
}

在上面注意,我在模板中使用字符串连接,我不确定这是最佳实践。还有另一种记录传入对象的方法吗?

1 个答案:

答案 0 :(得分:4)

您是否考虑过只传递查询对象的类型,或查询对象本身? E.g:

Log.Information("Processed {@Query} in {Elapsed} ms", query, watch.ElapsedMilliseconds);

这将打印输出,如:

Processed SomeQuery { SomeProp = "foo" } in 100 ms