elasticsearch,parameters,optional-parameters,serilog,C#,elasticsearch,Parameters,Optional Parameters,Serilog" /> elasticsearch,parameters,optional-parameters,serilog,C#,elasticsearch,Parameters,Optional Parameters,Serilog" />

将C#params与serilog一起使用

将C#params与serilog一起使用,c#,elasticsearch,parameters,optional-parameters,serilog,C#,elasticsearch,Parameters,Optional Parameters,Serilog,刚开始使用Serilog+ElasticSearch,我想知道是否有一种优雅的方法可以在一个日志条目中记录params对象数组。到目前为止,我唯一能够管理它的方法是通过每个params进行循环,这会为每个参数创建一个单独的日志条目。有没有办法把它们合并成一个日志条目 谢谢 样本: public static void MethodEntry<T>(string methodName, params object[] parameters) { if (parameters.L

刚开始使用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);
}
publicstaticvoidmethodentry(stringmethodname,params object[]参数)
{
如果(parameters.Length>0)
foreach(参数中的var param)//将创建参数。长度日志条目数
Debug(“用{@Param}输入{MethodName}”,MethodName,Param);
其他的
Debug(“输入{MethodName}”,MethodName);
}
编辑:

使用的水槽:

  • 塞里洛格
  • Serilog.Sinks.Elasticsearch(包括文件、周期性批处理和滚动文件接收器)
  • 像Environment和ThreadId这样的两个Enricher

如果您知道发件人对象的特定类型,可以使用Serilog的以下功能来避免记录不需要的信息:

Log.Logger = new LoggerConfiguration()
    .Destructure.ByTransforming<YOUR_SENDER_TYPE>(
        r => new { firstValue = r.firstValue, secondValue = r.secondValue })
    .WriteTo .... 
Log.Logger=new LoggerConfiguration()
.通过转换来破坏结构(
r=>new{firstValue=r.firstValue,secondValue=r.secondValue})
.写。。。。

有关记录结构化数据的更多信息,请参见官方文档

如果您知道发件人对象的特定类型,可以使用Serilog的以下功能来避免记录不需要的信息:

Log.Logger = new LoggerConfiguration()
    .Destructure.ByTransforming<YOUR_SENDER_TYPE>(
        r => new { firstValue = r.firstValue, secondValue = r.secondValue })
    .WriteTo .... 
Log.Logger=new LoggerConfiguration()
.通过转换来破坏结构(
r=>new{firstValue=r.firstValue,secondValue=r.secondValue})
.写。。。。
有关记录结构化数据的详细信息,请参见官方文档

publicstaticvoidmethodentry(stringmethodname,params object[]parameters)
{
Log.ForContext()
.ForContext(“参数”,参数)
.Debug(“输入{MethodName}”,MethodName);
}
这应该满足您的要求。

公共静态void MethodEntry(string methodName,params object[]parameters)
{
Log.ForContext()
.ForContext(“参数”,参数)
.Debug(“输入{MethodName}”,MethodName);
}


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

您是否尝试过记录参数?类似于以下内容:
Log.ForContext(typeof(T)).Debug(“使用{@Parameters}输入{MethodName}”,MethodName,Parameters)?@SamvelPetrosov我确实尝试过,但它导致内存使用量急剧上升,直到崩溃时才写入日志项。您传递了多少个参数?@SamvelPetrosov在崩溃的情况下,它是2(这是一个事件,所以
对象发送方
事件参数e
),您使用哪个接收器?请添加Serilog的初始配置您是否尝试过将参数记录到日志中?类似于以下内容:
Log.ForContext(typeof(T)).Debug(“使用{@Parameters}输入{MethodName}”,MethodName,Parameters)?@SamvelPetrosov我确实尝试过,但它导致内存使用量急剧上升,直到崩溃时才写入日志项。您传递了多少个参数?@SamvelPetrosov在崩溃的情况下,它是2(这是一个事件,所以
对象发送方
事件参数e
),您使用哪个接收器?请添加SerilogInterest的初始配置!我唯一关心的是.NET事件中的
发送者不总是一个通用的
对象吗?然后覆盖将应用于所有
对象
s,而不仅仅是
发送方
一个……是的,这就是为什么我从“如果你知道具体类型”开始回答的原因。例如,当您作为发件人单击按钮时,有一个装箱的“button”对象,因此检查
is button
将返回true。明白了,仍然
Destructure
很高兴知道这一点,谢谢!如果没有关于事件
发送者
的具体答案,那么我将在一天内或一天内接受这个答案。很有趣!我唯一关心的是.NET事件中的
发送者不总是一个通用的
对象吗?然后覆盖将应用于所有
对象
s,而不仅仅是
发送方
一个……是的,这就是为什么我从“如果你知道具体类型”开始回答的原因。例如,当您作为发件人单击按钮时,有一个装箱的“button”对象,因此检查
is button
将返回true。明白了,仍然
Destructure
很高兴知道这一点,谢谢!如果没有针对事件
发送方的特定答案,那么我将在一天或一天内接受此答案。我用以下对象尝试了这种方法:
Dim testStr=“test”
&
Dim testObj=New with{Key.Name=“test”,.Price=1.29}
。日志条目根本没有写入,没有崩溃或异常似乎只是跳过了调用。调用:
\u logger.MethodEntry(NameOf(TestMethod)、testStr、testObj)
方法:
log.ForContext(“参数”,参数)。调试(“输入{MethodName}”,MethodName)其中
参数
参数对象[]参数
。有什么想法吗?我仍然对此有问题,有什么想法吗?您是否打开了
Debug
级别的日志记录?有一件事需要检查。是的,我确实检查了一下,以确保我没有发疯。hahaI用以下对象尝试了这种方法:
Dim testStr=“test”
&
Dim testObj=New with{Key.Name=“test”,.Price=1.29}
。日志条目根本没有写入,没有崩溃或异常似乎只是跳过了调用。调用:
\u logger.MethodEntry(NameOf(TestMethod)、testStr、testObj)
方法:
log.ForContext(“参数”,参数)。调试(“输入{MethodName}”,MethodName)其中
参数
参数对象[]参数
。有什么想法吗?我仍然对此有问题,有什么想法吗?您是否打开了
Debug
级别的日志记录?有一件事要告诉切克