serilog属性解构不一致?

0yycz8jy  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(387)

我试图用一个对象来丰富我的serilog日志上下文,并让它的属性在elasticsearch中显示为destructured。这在我使用的时候效果很好 LogContext.PushProperty :

var conductorContext = new
{
   WorkflowInstanceId,
   task.TaskId,
   TaskName = task.WorkflowTask.Name,
   TaskType,
   task.InputData
};

using (LogContext.PushProperty("ConductorContext", conductorContext, destructureObjects: true))

这个 ConductorContext 对象被整齐地分解,其属性在elasticsearch中可以单独访问:

"fields" : {
   "ConductorContext" : {
      "WorkflowInstanceId" : "8dca7ebd-4b68-4389-ab98-136bbdf11484",
      "TaskId" : "29cef277-dc33-45a6-8b07-65a4de327f49",
      "TaskName" : "LoadAangrijpOmsDataTask",
      "TaskType" : "LoadAangrijpOmsDataTask",
      "InputData" : null
   }
}

但是,当我使用 WithProperty (我想添加一个全局对象)如下(在我的 Program.cs:Main 方法:

Log.Logger = new LoggerConfiguration()
   .Enrich.WithProperty("NomadContext", new
   {
      AllocationId = Environment.GetEnvironmentVariable("NOMAD_ALLOC_ID"),
      AllocationName = Environment.GetEnvironmentVariable("NOMAD_ALLOC_NAME"),
      JobId = Environment.GetEnvironmentVariable("NOMAD_JOB_ID"),
      JobName = Environment.GetEnvironmentVariable("NOMAD_JOB_NAME"),
      GroupName = Environment.GetEnvironmentVariable("NOMAD_GROUP_NAME"),
      TaskName = Environment.GetEnvironmentVariable("NOMAD_TASK_NAME")
   }, destructureObjects: true)

这个 NomadContext 在elasticsearch中显示为字符串:

"fields" : {
   "NomadContext" : "{ AllocationId = 293dd620-955c-7f8d-b6b5-9a36546bd29d, AllocationName = da_pub_worker.group_da_pub_worker[1], JobId = , JobName = da_pub_worker, GroupName = group_da_pub_worker, TaskName = task_da_pub_worker }"
}

我不明白为什么第一个有效,而第二个无效。我错过了什么?
我正在使用serilog.sinks.elasticsearch包。

apeeds0o

apeeds0o1#

问题不在serilog或serilog.sinks.elasticsearch包中,而是在elk堆栈本身的配置中。
删除并重新创建索引使nomadcontext得到了正确的解构。

相关问题