Наш клиент хочет, чтобы файлы журналов хранились в отдельных папках на основе контроллера. Например, все журналы, попавшие в контроллер доставки, будут храниться в C: \ logs \ shipping \, а журналы, попавшие в контроллер заказов, будут в c: \ logs \ orders и т. Д. Ниже мой метод ConfigureLoggingServices. Я использую Serilog и пишу в файл и в Seq. Я использую промежуточное программное обеспечение для захвата пользователя клиента и идентификатора сеанса (хранится в заголовке запроса) и помещаю эти значения в запись журнала с помощью LogContext.PushProperty (). Мне как-то нужно ввести имя контроллера в путь к файлу журнала. Это возможно? Спасибо
private void ConfigureLoggingServices()
{
var appName = Configuration.GetValue<string>("Logging:AppName", string.Empty);
var SeqURL = Configuration.GetValue<string>("Logging:SeqURL", string.Empty);
var pool = Environment.UserName;
//string logFile = "C:\\Logs\\" + {Controller} + "\\lis_api.log";
string logFile = "C:\\Logs\\lis_api.log";
const string customTemplate = "[{LIS_User} {Timestamp:HH:mm:ss.fff} {Level:u3} {SessionID}] {RequestMethod} {RequestPath} {Message:lj}{NewLine}{Exception}";
var name = Assembly.GetExecutingAssembly().GetName();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.MinimumLevel.Override("System", LogEventLevel.Warning)
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithProperty("Application", appName)
.Enrich.WithProperty("Version", $"{name.Version}")
.Enrich.WithProperty("AppPool", pool)
.Destructure.ByTransforming<User>(x => new { x.ID, x.Name, x.Controller })
// File Sink - Async
.WriteTo.Async(a => a.
File(string.Format(string.Format(logFile)),
rollingInterval: RollingInterval.Day,
outputTemplate: customTemplate,
fileSizeLimitBytes: 40000000,
shared: true,
retainedFileCountLimit: 50,
rollOnFileSizeLimit: true))
.WriteTo.Seq(SeqURL)
.CreateLogger();
LoggerFactory = CreateLoggerFactory();
}