изменение формата индекса ежедневно на неделю - PullRequest
1 голос
/ 20 июня 2019

В настоящее время я отправляю свой журнал из Nlog в ElasticSearch.Я создаю индекс ежедневно и отправляю журналы на этот индекс.Я хочу создать Index Weekly, поэтому я хочу изменить файл конфигурации.

Я создаю индекс в файле конфигурации NLog.index = "logstash-${date:format=yyyy.MM.dd}"

Моя часть конфигурации NLog:

  <target xsi:type="ElasticSearch" 
    index = "logstash-${date:format=yyyy.MM.dd}"
    uri="http://localhost:9200" 
    includeAllProperties ="true">
   </target>

Я обнаружил на некоторых форумах (https://github.com/logstash-plugins/logstash-output-elasticsearch/issues/541#issuecomment-270923437) меняюсь еженедельно, я должен использовать как xxxx.ww. Я пытался изменить конфигурациюфайл, подобный этому: index = "logstash-${date:format=xxxx.ww}"

К сожалению, это дает мне результат logstash-xxxx.ww, я ожидал результат logstash-2019.25

Так как я могу изменить ежедневный на еженедельный?

1 Ответ

3 голосов
/ 20 июня 2019

${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}"
...