索引格式每天更改为每周
index format change daily to weekly
我目前正在将我的日志从 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
那么如何将每日更改为每周?
${date}
接受与 DateTime.ToString
相同的格式。不幸的是,.NET 没有 ww 或 weeknumber 格式(参见 Custom date and time format strings - .NET | Microsoft Docs)
论坛上的 link 正在谈论 Joda Time,它是 Java 而不是 .NET 的库。
您可以使用 NLog 中的自定义布局渲染器解决此问题。在 .NET 中获取周数有点棘手,从 Get the correct week number of a given date:
中获取
// 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 - How to write a custom layout renderer)
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}"
我目前正在将我的日志从 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
那么如何将每日更改为每周?
${date}
接受与 DateTime.ToString
相同的格式。不幸的是,.NET 没有 ww 或 weeknumber 格式(参见 Custom date and time format strings - .NET | Microsoft Docs)
论坛上的 link 正在谈论 Joda Time,它是 Java 而不是 .NET 的库。
您可以使用 NLog 中的自定义布局渲染器解决此问题。在 .NET 中获取周数有点棘手,从 Get the correct week number of a given date:
中获取// 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 - How to write a custom layout renderer)
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}"