Отображение оболочки-приемника Serilog, отдельное имя файла от содержимого - PullRequest
2 голосов
/ 16 апреля 2020

Используя библиотеку 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!

По сути, моя цель - войти в любой именованный журнал, но их может быть несколько сотен. из них.

1 Ответ

3 голосов
/ 16 апреля 2020

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
...