我一直在尝试使用Github: serilog-sinks-map中的示例来使用Serilog的Map接收器。我可以使用以下命令将其写入日志:
Log.Logger = new LoggerConfiguration()
.WriteTo.Map("Name", "Other", (name, wt) => wt.File($"./logs/log-{name}.txt"))
.CreateLogger();
Log.Information("Hello, {Name}!", "Alice");
但是结果是“你好,爱丽丝!”获取写入log-Alice.txt文件的信息。如何仅将没有“ Alice”的消息写到log-Alice.txt?
如果我使用
登录Log.Information("Hello", "Alice");
“ Hello”被写入log-Other.txt
答案 0 :(得分:1)
仅在消息模板中使用属性“名称”时才设置。否则,Serilog不知道如何将值“ Alice”映射到属性。
因此,我要设置此属性,必须创建一个上下文,如下所示:
var logger = Log.ForContext("Name", "Alice");
logger.Information("Helping user {User} with question {QuestionId}.", "Janne Rantala", "59190740");
此日志Helping user Janne Rantala with question 59190740.
将记录在log-Alice.txt文件中。
因此,如果您想将类Foo
中的所有内容记录在文件Bar
中。您可以这样创建课程:
public class Foo
{
private readonly ILogger _logger = Log.ForContext("Name", "Bar");
public void DoThings()
{
this._logger.Information("Hello");
this._logger.Warning("world");
}
}