通过 ByIncludingOnly 过滤事件
Filtering events via ByIncludingOnly
我遇到了一些日志事件包含大 属性 值的情况(在这种特殊情况下,是 XML 的大数据包)。我想使用 Serilog 的 ByIncludingOnly
功能为这些大数据事件使用额外的接收器。这是我认为可行的示例:
private static void FilteredLogging()
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
.WriteTo.File("big.txt")
.CreateLogger();
Log.Information("go");
Log.ForContext("data", "12345").Information("Small packet");
Log.ForContext("data", "1234567890987654321").Information("Big packet");
Log.CloseAndFlush();
}
private static bool LargeDataPackets(LogEvent le)
{
return le.Properties.ContainsKey("data") &&
le.Properties["data"].ToString().Length > 10;
}
但是,当我 运行 此代码时,所有三个消息都进入 "big.txt" 文件。我希望只有最后一项 ("Big packet") 进入文件,因为它是唯一一个 data
属性 超过 10 个字符的事件。
我正在使用 Serilog 2.0。
您的括号略有偏差:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
.WriteTo.File("big.txt")
.CreateLogger();
应该是:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets)
.WriteTo.File("big.txt"))
.CreateLogger();
我遇到了一些日志事件包含大 属性 值的情况(在这种特殊情况下,是 XML 的大数据包)。我想使用 Serilog 的 ByIncludingOnly
功能为这些大数据事件使用额外的接收器。这是我认为可行的示例:
private static void FilteredLogging()
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
.WriteTo.File("big.txt")
.CreateLogger();
Log.Information("go");
Log.ForContext("data", "12345").Information("Small packet");
Log.ForContext("data", "1234567890987654321").Information("Big packet");
Log.CloseAndFlush();
}
private static bool LargeDataPackets(LogEvent le)
{
return le.Properties.ContainsKey("data") &&
le.Properties["data"].ToString().Length > 10;
}
但是,当我 运行 此代码时,所有三个消息都进入 "big.txt" 文件。我希望只有最后一项 ("Big packet") 进入文件,因为它是唯一一个 data
属性 超过 10 个字符的事件。
我正在使用 Serilog 2.0。
您的括号略有偏差:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
.WriteTo.File("big.txt")
.CreateLogger();
应该是:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(new RawFormatter())
.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets)
.WriteTo.File("big.txt"))
.CreateLogger();