CachedUntil - Reuse _cachedValueExpires for the period end
This commit is contained in:
1 parent
ce13d92371
commit
97f1f71bbe
1 file changed
+15
-12
@@ -89,7 +89,6 @@ namespace NLog.LayoutRenderers.Wrappers
|
|||||||
private DateTime _cachedValueExpires;
|
private DateTime _cachedValueExpires;
|
||||||
private TimeSpan? _cachedValueTimeout;
|
private TimeSpan? _cachedValueTimeout;
|
||||||
private DateTime _cachedValuePeriodStart;
|
private DateTime _cachedValuePeriodStart;
|
||||||
private DateTime _cachedValuePeriodEnd;
|
|
||||||
private CachedUntilOption _cachedUntil;
|
private CachedUntilOption _cachedUntil;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -184,10 +183,7 @@ namespace NLog.LayoutRenderers.Wrappers
|
|||||||
{
|
{
|
||||||
_cachedValue = cachedValue = base.RenderInner(logEvent);
|
_cachedValue = cachedValue = base.RenderInner(logEvent);
|
||||||
_renderedCacheKey = newCacheKey;
|
_renderedCacheKey = newCacheKey;
|
||||||
if (_cachedValueTimeout.HasValue)
|
_cachedValueExpires = ResolveCachedValueExpires(logEvent.TimeStamp);
|
||||||
_cachedValueExpires = logEvent.TimeStamp + _cachedValueTimeout.Value;
|
|
||||||
if (_cachedUntil != CachedUntilOption.None)
|
|
||||||
UpdateCachedValuePeriod(logEvent.TimeStamp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -205,21 +201,28 @@ namespace NLog.LayoutRenderers.Wrappers
|
|||||||
if (_renderedCacheKey != newCacheKey)
|
if (_renderedCacheKey != newCacheKey)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (_cachedValueTimeout.HasValue && logEvent.TimeStamp > _cachedValueExpires)
|
if ((_cachedValueTimeout.HasValue || _cachedUntil != CachedUntilOption.None) && logEvent.TimeStamp > _cachedValueExpires)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (_cachedUntil != CachedUntilOption.None && (logEvent.TimeStamp < _cachedValuePeriodStart || logEvent.TimeStamp > _cachedValuePeriodEnd))
|
if (_cachedUntil != CachedUntilOption.None && logEvent.TimeStamp < _cachedValuePeriodStart)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return _cachedValue;
|
return _cachedValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateCachedValuePeriod(DateTime timeStamp)
|
private DateTime ResolveCachedValueExpires(DateTime timeStamp)
|
||||||
{
|
{
|
||||||
var periodTicks = _cachedUntil == CachedUntilOption.DayChange ? TimeSpan.TicksPerDay : TimeSpan.TicksPerHour;
|
var expires = _cachedValueTimeout.HasValue ? timeStamp + _cachedValueTimeout.Value : DateTime.MaxValue;
|
||||||
_cachedValuePeriodStart = new DateTime(timeStamp.Ticks - timeStamp.Ticks % periodTicks, timeStamp.Kind);
|
if (_cachedUntil != CachedUntilOption.None)
|
||||||
// Inclusive end, so the last period ends at DateTime.MaxValue without overflow
|
{
|
||||||
_cachedValuePeriodEnd = _cachedValuePeriodStart.AddTicks(periodTicks - 1);
|
var periodTicks = _cachedUntil == CachedUntilOption.DayChange ? TimeSpan.TicksPerDay : TimeSpan.TicksPerHour;
|
||||||
|
_cachedValuePeriodStart = new DateTime(timeStamp.Ticks - timeStamp.Ticks % periodTicks, timeStamp.Kind);
|
||||||
|
// Inclusive end, so the last period ends at DateTime.MaxValue without overflow
|
||||||
|
var periodEnd = _cachedValuePeriodStart.AddTicks(periodTicks - 1);
|
||||||
|
if (periodEnd < expires)
|
||||||
|
expires = periodEnd;
|
||||||
|
}
|
||||||
|
return expires;
|
||||||
}
|
}
|
||||||
|
|
||||||
string? IStringValueRenderer.GetFormattedString(LogEventInfo logEvent) => Cached ? RenderInner(logEvent) : null;
|
string? IStringValueRenderer.GetFormattedString(LogEventInfo logEvent) => Cached ? RenderInner(logEvent) : null;
|
||||||
|
|||||||
Reference in new issue
Block a user