${date}
принимает те же форматы, что и DateTime.ToString
.К сожалению, в .NET нет формата ww или номера недели (см. Пользовательские строки формата даты и времени - .NET | Документы Microsoft )
Ссылка на форуме говорит о Joda Time, котораяэто библиотека для Java, а не .NET.
Вы можете решить эту проблему с помощью специального средства визуализации макетов в NLog.Получить номер недели в .NET немного сложно, получил от Получить правильный номер недели для данной даты :
// This presumes that weeks start with Monday.
// Week 1 is the 1st week of the year with a Thursday in it.
public static int GetIso8601WeekOfYear(DateTime time)
{
// Seriously cheat. If its Monday, Tuesday or Wednesday, then it'll
// be the same week# as whatever Thursday, Friday or Saturday are,
// and we always get those right
DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
{
time = time.AddDays(3);
}
// Return the week of our adjusted day
return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
Создание средства визуализации макета, которое отображает 2019.25 и т. Д. (См. NLog docs - Как написать настраиваемое средство визуализации макета )
using NLog.LayoutRenderers;
using NLog;
...
// register ${myDateTime}. Register a soon as possible (e.g main(), app_start etc)
LayoutRenderer.Register("myDateTime", logEventInfo =>
logEventInfo.TimeStamp.Year +"." + GetIso8601WeekOfYear(logEventInfo.TimeStamp));
и теперь это должно работать:
index = "logstash-${myDateTime}"