diff --git a/src/NLog/LayoutRenderers/Wrappers/CachedLayoutRendererWrapper.cs b/src/NLog/LayoutRenderers/Wrappers/CachedLayoutRendererWrapper.cs index 11f67c2..97e4b53 100644 --- a/src/NLog/LayoutRenderers/Wrappers/CachedLayoutRendererWrapper.cs +++ b/src/NLog/LayoutRenderers/Wrappers/CachedLayoutRendererWrapper.cs @@ -208,7 +208,12 @@ namespace NLog.LayoutRenderers.Wrappers private DateTime? ResolveCachedValueExpires(DateTime timeStamp) { - DateTime? expires = _cachedValueTimeout.HasValue ? timeStamp + _cachedValueTimeout.Value : null; + DateTime? expires = null; + if (_cachedValueTimeout.HasValue) + { + var timeoutTicks = Math.Min(_cachedValueTimeout.Value.Ticks, DateTime.MaxValue.Ticks - timeStamp.Ticks); + expires = timeStamp.AddTicks(timeoutTicks); + } if (_cachedUntil != CachedUntilLifetime.None) { var periodTicks = _cachedUntil == CachedUntilLifetime.DayChange ? TimeSpan.TicksPerDay : TimeSpan.TicksPerHour; diff --git a/tests/NLog.UnitTests/LayoutRenderers/Wrappers/CachedTests.cs b/tests/NLog.UnitTests/LayoutRenderers/Wrappers/CachedTests.cs index d8ebf17..a5c9ce9 100644 --- a/tests/NLog.UnitTests/LayoutRenderers/Wrappers/CachedTests.cs +++ b/tests/NLog.UnitTests/LayoutRenderers/Wrappers/CachedTests.cs @@ -154,11 +154,13 @@ namespace NLog.UnitTests.LayoutRenderers.Wrappers } [Theory] - [InlineData("HourChange")] - [InlineData("DayChange")] - public void CachedUntilLastPeriodTest(string cachedUntil) + [InlineData("cachedUntil=HourChange")] + [InlineData("cachedUntil=DayChange")] + [InlineData("cachedSeconds=3600")] + [InlineData("cachedUntil=DayChange:cachedSeconds=3600")] + public void CachedLastPeriodTest(string cachedOptions) { - SimpleLayout l = "${guid:cachedUntil=" + cachedUntil + "}"; + SimpleLayout l = "${guid:" + cachedOptions + "}"; var s1 = l.Render(new LogEventInfo() { TimeStamp = DateTime.MaxValue.AddMinutes(-30) }); var s2 = l.Render(new LogEventInfo() { TimeStamp = DateTime.MaxValue }); Assert.NotEmpty(s1);