Fixes #13715 Simple LogViewer queries not returning results (#13748)

* Fixes #13715 issue with simple logviewer searches

* Update Logviewer test - to ensure MessageLike and simple equivalent returns same result count to help catch
This commit is contained in:
Warren Buckley
2023-01-30 09:32:28 +00:00
committed by GitHub
parent 23b03f408e
commit d38fabea4a
2 changed files with 6 additions and 4 deletions

View File

@@ -29,7 +29,7 @@ internal class ExpressionFilter : ILogFilter
// If the expression is one word and doesn't contain a serilog operator then we can perform a like search
if (!filterExpression.Contains(" ") && !filterExpression.ContainsAny(ExpressionOperators.Select(c => c)))
{
filter = PerformMessageLikeFilter(filterExpression);
filter = PerformMessageLikeFilter(filterExpression, customSerilogFunctions);
}
// check if it's a valid expression
@@ -48,7 +48,7 @@ internal class ExpressionFilter : ILogFilter
{
// 'error' describes a syntax error, where it was unable to compile an expression
// Assume the expression was a search string and make a Like filter from that
filter = PerformMessageLikeFilter(filterExpression);
filter = PerformMessageLikeFilter(filterExpression, customSerilogFunctions);
}
}
@@ -57,10 +57,10 @@ internal class ExpressionFilter : ILogFilter
public bool TakeLogEvent(LogEvent e) => _filter == null || _filter(e);
private Func<LogEvent, bool>? PerformMessageLikeFilter(string filterExpression)
private Func<LogEvent, bool>? PerformMessageLikeFilter(string filterExpression, SerilogLegacyNameResolver serilogLegacyNameResolver)
{
var filterSearch = $"@Message like '%{SerilogExpression.EscapeLikeExpressionContent(filterExpression)}%'";
if (SerilogExpression.TryCompile(filterSearch, out CompiledExpression? compiled, out var error))
if (SerilogExpression.TryCompile(filterSearch, null, serilogLegacyNameResolver, out CompiledExpression? compiled, out var error))
{
// `compiled` is a function that can be executed against `LogEvent`s:
return evt =>

View File

@@ -197,6 +197,8 @@ public class LogviewerTests
[TestCase("@mt = '{EndMessage} ({Duration}ms) [Timing {TimingId}]'", 26)]
[TestCase("SortedComponentTypes[?] = 'Umbraco.Web.Search.ExamineComponent'", 1)]
[TestCase("Contains(SortedComponentTypes[?], 'DatabaseServer')", 1)]
[TestCase("@Message like '%definition%'", 6)]
[TestCase("definition", 6)]
[Test]
public void Logs_Can_Query_With_Expressions(string queryToVerify, int expectedCount)
{