Serilog Map 接收器日志文本

Serilog Map sink log text

我一直在尝试使用来自 Github: serilog-sinks-map 的样本来使用 Serilog 的 Map sink。我可以使用它来写入日志:

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

但结果是 "Hello, Alice!" 被写入 log-Alice.txt 文件。我如何在没有 "Alice" 的情况下只写那条消息到 log-Alice.txt?

如果我使用

登录
Log.Information("Hello", "Alice");

"Hello" 被写入日志-Other.txt

属性 "Name" 仅在消息模板中使用时设置。否则 Serilog 不知道如何将值 "Alice" 映射到 属性.

所以如果你想设置这个 属性 你必须创建一个上下文,就像这样:

var logger = Log.ForContext("Name", "Alice");
logger.Information("Helping user {User} with question {QuestionId}.", "Janne Rantala", "59190740");

这将在文件 log-Alice.txt.

中记录 Helping user Janne Rantala with question 59190740.

因此,如果您想将 class Foo 中的所有内容记录在文件 Bar 中。您可以这样创建 class:

public class Foo
{
    private readonly ILogger _logger = Log.ForContext("Name", "Bar");

    public void DoThings()
    {
       this._logger.Information("Hello");
       this._logger.Warning("world");
    }
}