【问题标题】:Using Serilog to log generic object使用 Serilog 记录通用对象
【发布时间】:2014-11-30 03:57:33
【问题描述】:

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

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

请注意,我在模板中使用字符串连接,我不确定这是最佳实践。还有其他方法可以记录传入的对象吗?

【问题讨论】:

    标签: serilog


    【解决方案1】:

    您是否考虑过只传递查询对象的类型,还是传递查询对象本身?例如:

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

    这将打印如下输出:

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

    【讨论】:

    • 就这么简单!?以这种方式记录它可以让我像您在此处的博客文章 (nblumhardt.com/2013/06/serilog-and-ravendb) 中那样对它运行有趣的查询吗?
    • 我花了一点时间来验证,但非常酷。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多