Skip to content

Commit 579fe6e

Browse files
authored
Merge pull request #68 from serilog/dev
3.3.0 Release
2 parents caaac94 + c5b1523 commit 579fe6e

File tree

9 files changed

+62
-8
lines changed

9 files changed

+62
-8
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ User-defined functions are supplied through an instance of `NameResolver`:
381381

382382
```csharp
383383
var myFunctions = new StaticMemberNameResolver(typeof(MyFunctions));
384-
var expr = SerilogExpression.Compile("IsHello(User.Name)", new[] { myFunctions });
384+
var expr = SerilogExpression.Compile("IsHello(User.Name)", nameResolver: customSerilogFunctions);
385385
// Filter events based on whether `User.Name` is `'Hello'` :-)
386386
```
387387

src/Serilog.Expressions/Expressions/Compilation/Arrays/ConstantArrayEvaluator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ConstantArrayEvaluator : IdentityTransformer
2323
{
2424
static readonly ConstantArrayEvaluator Instance = new ConstantArrayEvaluator();
2525

26-
public static Expression Evaluate(Expression expression)
26+
public static Expression Rewrite(Expression expression)
2727
{
2828
return Instance.Transform(expression);
2929
}

src/Serilog.Expressions/Expressions/Compilation/ExpressionCompiler.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ public static Expression Translate(Expression expression)
3232
actual = TextMatchingTransformer.Rewrite(actual);
3333
actual = LikeSyntaxTransformer.Rewrite(actual);
3434
actual = PropertiesObjectAccessorTransformer.Rewrite(actual);
35-
actual = ConstantArrayEvaluator.Evaluate(actual);
36-
actual = WildcardComprehensionTransformer.Expand(actual);
35+
actual = ConstantArrayEvaluator.Rewrite(actual);
36+
actual = WildcardComprehensionTransformer.Rewrite(actual);
3737
return actual;
3838
}
3939

40-
public static Evaluatable Compile(Expression expression, IFormatProvider? formatProvider,
41-
NameResolver nameResolver)
40+
public static Evaluatable Compile(Expression expression, IFormatProvider? formatProvider, NameResolver nameResolver)
4241
{
4342
var actual = Translate(expression);
4443
return LinqExpressionCompiler.Compile(actual, formatProvider, nameResolver);

src/Serilog.Expressions/Expressions/Compilation/Linq/LinqExpressionCompiler.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ protected override ExpressionBody Transform(AmbientNameExpression px)
218218
BuiltInProperty.Renderings => Splice(context => Intrinsics.GetRenderings(context.LogEvent, formatProvider)),
219219
BuiltInProperty.EventId => Splice(context =>
220220
new ScalarValue(EventIdHash.Compute(context.LogEvent.MessageTemplate.Text))),
221+
var alias when _nameResolver.TryResolveBuiltInPropertyName(alias, out var target) =>
222+
Transform(new AmbientNameExpression(target, true)),
221223
_ => LX.Constant(null, typeof(LogEventPropertyValue))
222224
};
223225
}

src/Serilog.Expressions/Expressions/Compilation/OrderedNameResolver.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,17 @@ public override bool TryBindFunctionParameter(ParameterInfo parameter, [MaybeNul
5151
boundValue = null;
5252
return false;
5353
}
54+
55+
public override bool TryResolveBuiltInPropertyName(string alias, [NotNullWhen(true)] out string? target)
56+
{
57+
foreach (var resolver in _orderedResolvers)
58+
{
59+
if (resolver.TryResolveBuiltInPropertyName(alias, out target))
60+
return true;
61+
}
62+
63+
target = null;
64+
return false;
65+
}
5466
}
5567
}

src/Serilog.Expressions/Expressions/Compilation/Wildcards/WildcardComprehensionTransformer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class WildcardComprehensionTransformer : IdentityTransformer
2222
{
2323
int _nextParameter;
2424

25-
public static Expression Expand(Expression root)
25+
public static Expression Rewrite(Expression root)
2626
{
2727
var wc = new WildcardComprehensionTransformer();
2828
return wc.Transform(root);

src/Serilog.Expressions/Expressions/NameResolver.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,20 @@ public virtual bool TryBindFunctionParameter(ParameterInfo parameter, [MaybeNull
5353
boundValue = null;
5454
return false;
5555
}
56+
57+
/// <summary>
58+
/// Map an unrecognized built-in property name to a recognised one.
59+
/// </summary>
60+
/// <remarks>Intended predominantly to support migration from <em>Serilog.Filters.Expressions</em>.</remarks>
61+
/// <param name="alias">The unrecognized name, for example, <code>"Message"</code>; the <code>@</code> prefix is
62+
/// not included.</param>
63+
/// <param name="target">If the name could be resolved, the target property name, without any prefix; for
64+
/// example, <code>"m"</code>.</param>
65+
/// <returns>True if the alias was mapped to a built-in property; otherwise, false.</returns>
66+
public virtual bool TryResolveBuiltInPropertyName(string alias, [NotNullWhen(true)] out string? target)
67+
{
68+
target = null;
69+
return false;
70+
}
5671
}
5772
}

src/Serilog.Expressions/Serilog.Expressions.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<Description>An embeddable mini-language for filtering, enriching, and formatting Serilog
55
events, ideal for use with JSON or XML configuration.</Description>
6-
<VersionPrefix>3.2.1</VersionPrefix>
6+
<VersionPrefix>3.3.0</VersionPrefix>
77
<Authors>Serilog Contributors</Authors>
88
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
99
<GenerateDocumentationFile>true</GenerateDocumentationFile>

test/Serilog.Expressions.Tests/Expressions/NameResolverTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace Serilog.Expressions.Tests.Expressions
99
{
1010
public class NameResolverTests
1111
{
12+
// ReSharper disable once UnusedMember.Global
1213
public static LogEventPropertyValue? Magic(LogEventPropertyValue? number)
1314
{
1415
if (!Coerce.Numeric(number, out var num))
@@ -17,6 +18,7 @@ public class NameResolverTests
1718
return new ScalarValue(num + 42);
1819
}
1920

21+
// ReSharper disable once UnusedMember.Global
2022
public static LogEventPropertyValue? SecretWordAt(string word, LogEventPropertyValue? index)
2123
{
2224
if (!Coerce.Numeric(index, out var i))
@@ -52,6 +54,21 @@ public override bool TryBindFunctionParameter(ParameterInfo parameter, [MaybeNul
5254
}
5355
}
5456

57+
class LegacyLevelPropertyNameResolver: NameResolver
58+
{
59+
public override bool TryResolveBuiltInPropertyName(string alias, [NotNullWhen(true)] out string? target)
60+
{
61+
if (alias == "Level")
62+
{
63+
target = "l";
64+
return true;
65+
}
66+
67+
target = null;
68+
return false;
69+
}
70+
}
71+
5572
[Fact]
5673
public void UserDefinedFunctionsAreCallableInExpressions()
5774
{
@@ -69,5 +86,14 @@ public void UserDefinedFunctionsCanReceiveUserProvidedParameters()
6986
nameResolver: new SecretWordResolver(new StaticMemberNameResolver(typeof(NameResolverTests)), "hello"));
7087
Assert.True(Coerce.IsTrue(expr(Some.InformationEvent())));
7188
}
89+
90+
[Fact]
91+
public void BuiltInPropertiesCanBeAliased()
92+
{
93+
var expr = SerilogExpression.Compile(
94+
"@Level = 'Information'",
95+
nameResolver: new LegacyLevelPropertyNameResolver());
96+
Assert.True(Coerce.IsTrue(expr(Some.InformationEvent())));
97+
}
7298
}
7399
}

0 commit comments

Comments
 (0)