将 C# 参数与 serilog 一起使用

Using C# params with serilog

刚开始使用 Serilog + ElasticSearch,想知道是否有一种优雅的方法可以在一个日志条目中记录一个 params 对象数组。到目前为止,我能够管理它的唯一方法是遍历每个 params ,它为每个创建一个单独的日志条目。有什么方法可以将它们合并为一个日志条目吗?

谢谢!

样本:

public static void MethodEntry<T>(string methodName, params object[] parameters)
{
    if (parameters.Length > 0)
        foreach (var param in parameters) // Will create parameters.Length number of log entries
            Log.ForContext(typeof(T)).Debug("Entering {MethodName} with {@Param}", methodName, param);
    else
        Log.ForContext(typeof(T)).Debug("Entering {MethodName}", methodName);
}

编辑:

使用的水槽:

如果您知道 Sender 对象的具体类型,您可以使用 Serilog 的以下功能来避免记录不需要的信息:

Log.Logger = new LoggerConfiguration()
    .Destructure.ByTransforming<YOUR_SENDER_TYPE>(
        r => new { firstValue = r.firstValue, secondValue = r.secondValue })
    .WriteTo .... 

您可以在官方文档中找到有关记录结构化数据的更多信息Serilog Structured Data

public static void MethodEntry<T>(string methodName, params object[] parameters)
{
    Log.ForContext<T>()
        .ForContext("Parameters", parameters)
        .Debug("Entering {MethodName}", methodName);
}

这应该可以满足您的需求。