将 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);
}
编辑:
使用的水槽:
- Serilog
- Serilog.Sinks.Elasticsearch(包括 The File、PeriodicBatching 和 RollingFile Sinks)
- 像 Environment 和 ThreadId 这样的 Couple Enrichers
如果您知道 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);
}
这应该可以满足您的需求。
刚开始使用 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);
}
编辑:
使用的水槽:
- Serilog
- Serilog.Sinks.Elasticsearch(包括 The File、PeriodicBatching 和 RollingFile Sinks)
- 像 Environment 和 ThreadId 这样的 Couple Enrichers
如果您知道 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);
}
这应该可以满足您的需求。