Serilog接收器包装映射,将文件名与内容分开

问题描述 投票:0回答:1

使用Serilog.Sinks.Map库,示例显示

Log.Logger = new LoggerConfiguration()
    .WriteTo.Map("Name", "Other", (name, wt) => wt.File($"./logs/log-{name}.txt"))
    .CreateLogger();

Log.Information("Hello, {Name}!", "Alice");
Log.CloseAndFlush();

带有文本log-Alice.txt的事件写入Hello, Alice!

我该如何做,但将文件名与内容分开?例如,我想做

Log.Information("Hello!", "Alice");

应写入文件log-Alice.txt,但文本为Hello!

基本上,我的目标是登录到任何命名的日志,但可能有数百个。

c# serilog
1个回答
1
投票

Serilog.Sinks.Map,在您的示例中,使用名为Name的属性来定义文件名。如果您不想在消息模板中定义此属性,则可以通过Context进行定义,例如:

var log = Log.ForContext("Name", "Alice");

log.Information("Hello!");
log.Information("Hello Again!");

以上两种消息都将被写入log-Alice.txt文件,因为它们在日志上下文中都具有属性Name = "Alice"

类似地,以下内容将每条消息写入单独的文件:

Log.ForContext("Name", "John").Information("Hello 1!"); // log-John.txt
Log.ForContext("Name", "Peter").Information("Hello 2!"); // log-Peter.txt
© www.soinside.com 2019 - 2024. All rights reserved.