From 06b89963e4fbbcade4b75eea63edea9893386ea8 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Mon, 30 Jan 2023 09:32:28 +0000 Subject: [PATCH] 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 (cherry picked from commit d38fabea4a5bd43b980c21ef2b90cc6ba320da00) --- .../Logging/Viewer/ExpressionFilter.cs | 8 ++++---- .../Umbraco.Infrastructure/Logging/LogviewerTests.cs | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs b/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs index a8444f4276..5e2130b5d3 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs @@ -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? PerformMessageLikeFilter(string filterExpression) + private Func? 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 => diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs index 45c8929628..5c028714b8 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs @@ -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) {