我试图用一个对象来丰富我的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包。
1条答案
按热度按时间apeeds0o1#
问题不在serilog或serilog.sinks.elasticsearch包中,而是在elk堆栈本身的配置中。
删除并重新创建索引使nomadcontext得到了正确的解构。