gpt4 book ai didi

asp.net-core - Serilog - 无法根据属性登录到多个文件

转载 作者:行者123 更新时间:2023-12-04 01:20:03 25 4
gpt4 key购买 nike

您好,我正在尝试使用 Serilog 在一个文件中记录一些消息,将其他消息记录在另一个文件中.
我尝试了以下配置:

Log.Logger = new LoggerConfiguration()
.WriteTo.Map("type", "audit", (name, x) => x.File(auditLogPath))
.WriteTo.Map("type", "normal", (nm, wt) => wt.File(logpath).WriteTo.Console())
.CreateLogger();
现在我期待当我 Push键值为 audit 的键值对到日志上下文,我的数据记录在第一个模式 audit :
using(LogContext.PushProperty("type","audit")
{
Log.Information("something");
}
为什么我的数据进入第二种模式?它被记录到控制台并放入另一个文件,我不明白为什么。
更新
从下面的答案中我了解到不需要定义多个记录器,而是基于 key 进行调度:
Log.Logger = new LoggerConfiguration()
.WriteTo.Map("type", string.Empty, (nm, wt) => {
if (nm == "audit") {
wt.File(auditLogPath); //i want to write here !
return;
}
wt.File(logpath).WriteTo.Console()
})
.CreateLogger();
但是,当我尝试使用它登录第一个场景时 audit如下所示,所有日志都放在另一个场景中( logpath + Console )
using(LogContext.PushProperty("type","audit"))
{
Log.Information("something");
}

最佳答案

你误解了 Map 的第二个参数是什么是。这不是过滤器...它只是您 keyPropertyName 的默认值,以防它不存在于日志事件中。
根据 type 的值选择接收器的决定属性必须由您在 Map 的正文中完成配置。
例如

Log.Logger = new LoggerConfiguration()
.WriteTo.Map("type", string.Empty, (type, wt) =>
{
if (type.Equals("audit"))
{
wt.File(auditLogPath);
}
else if (type.Equals("normal"))
{
wt.File(logPath)
.WriteTo.Console();
}
})
.Enrich.FromLogContext()
.CreateLogger();
还要注意,没有通过 LogContext 启用浓缩您推送的属性对 Map 不可见,所以你需要 .Enrich.FromLogContext()以上。

关于asp.net-core - Serilog - 无法根据属性登录到多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62776683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com