Serilog 接收器包装器映射,将文件名与内容分开
Serilog sink wrapper mapping, separate filename from content
使用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!
基本上我的目标是记录到任何命名的日志,但可能有数百个。
在您的示例中,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
使用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!
基本上我的目标是记录到任何命名的日志,但可能有数百个。
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