Skip to content

Commit c8cc16d

Browse files
authored
Merge pull request #317 from datalust/dev
2024.1 Maintenance Release
2 parents 11a4a0f + 7ee8bb6 commit c8cc16d

File tree

7 files changed

+41
-25
lines changed

7 files changed

+41
-25
lines changed

src/SeqCli/Apps/AppLoader.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System.Linq;
2020
using System.Reflection;
2121
using Seq.Apps;
22+
using Seq.Syntax.Expressions;
2223
using Serilog;
2324

2425
namespace SeqCli.Apps;
@@ -30,10 +31,11 @@ class AppLoader : IDisposable
3031
// These are used for interop between the host process and the app. The
3132
// app _must_ be able to load on the unified version.
3233
readonly Assembly[] _contracts =
33-
{
34+
[
3435
typeof(SeqApp).Assembly,
3536
typeof(Log).Assembly,
36-
};
37+
typeof(SerilogExpression).Assembly
38+
];
3739

3840
public AppLoader(string packageBinaryPath)
3941
{

src/SeqCli/Cli/Commands/IngestCommand.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
using Serilog;
2525
using Serilog.Core;
2626
using Serilog.Events;
27-
using Serilog.Expressions;
2827

2928
namespace SeqCli.Cli.Commands;
3029

@@ -95,7 +94,7 @@ protected override async Task<int> Run()
9594
if (_filter != null)
9695
{
9796
var eval = SeqSyntax.CompileExpression(_filter);
98-
filter = evt => ExpressionResult.IsTrue(eval(evt));
97+
filter = evt => Seq.Syntax.Expressions.ExpressionResult.IsTrue(eval(evt));
9998
}
10099

101100
var connection = _connectionFactory.Connect(_connection);

src/SeqCli/Cli/Commands/PrintCommand.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.IO;
1717
using System.Threading.Tasks;
1818
using Newtonsoft.Json;
19+
using Seq.Syntax.Expressions;
1920
using SeqCli.Cli.Features;
2021
using SeqCli.Config;
2122
using SeqCli.Ingestion;
@@ -81,7 +82,15 @@ var theme
8182
applyThemeToRedirectedOutput: applyThemeToRedirectedOutput);
8283

8384
if (_filter != null)
84-
outputConfiguration.Filter.ByIncludingOnly(_filter);
85+
{
86+
if (!SerilogExpression.TryCompile(_filter, out var filter, out var error))
87+
{
88+
Log.Error("The specified filter could not be compiled: {Error}", error);
89+
return 1;
90+
}
91+
92+
outputConfiguration.Filter.ByIncludingOnly(evt => ExpressionResult.IsTrue(filter(evt)));
93+
}
8594

8695
await using var logger = outputConfiguration.CreateLogger();
8796
foreach (var input in _fileInputFeature.OpenInputs())

src/SeqCli/Output/OutputFormatter.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ namespace SeqCli.Output;
77

88
static class OutputFormatter
99
{
10+
// This is the only usage of Serilog.Expressions remaining in seqcli; the upstream Seq.Syntax doesn't yet support
11+
// the `@sp` property, because it needs to load on older Seq installs with older Serilog versions embedded in the
12+
// app runner. Once we've updated it, we can switch this to a Seq.Syntax template.
1013
internal static readonly ITextFormatter Json = new ExpressionTemplate(
1114
$"{{ {{@t, @mt, @l: coalesce({LevelMapping.SurrogateLevelProperty}, if @l = 'Information' then undefined() else @l), @x, @sp, @tr, @ps: coalesce({TraceConstants.ParentSpanIdProperty}, @ps), @st: coalesce({TraceConstants.SpanStartTimestampProperty}, @st), ..rest()}} }}\n"
1215
);

src/SeqCli/SeqCli.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<PackageReference Include="Destructurama.JsonNet" Version="2.0.1" />
3030
<PackageReference Include="newtonsoft.json" Version="13.0.3" />
3131
<PackageReference Include="Serilog" Version="3.1.1" />
32-
<PackageReference Include="serilog.expressions" Version="4.0.0" />
32+
<PackageReference Include="Serilog.Expressions" Version="4.0.0" />
3333
<PackageReference Include="Serilog.Formatting.Compact" Version="2.0.0" />
3434
<PackageReference Include="Serilog.Formatting.Compact.Reader" Version="3.0.0" />
3535
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
using Seq.Syntax.Expressions;
3+
4+
namespace SeqCli.Syntax;
5+
6+
class SeqCliNameResolver: NameResolver
7+
{
8+
public override bool TryResolveBuiltInPropertyName(string alias, [MaybeNullWhen(false)] out string target)
9+
{
10+
switch (alias)
11+
{
12+
case "@l":
13+
target = "coalesce(SeqCliOriginalLevel, @l)";
14+
return true;
15+
default:
16+
target = null;
17+
return false;
18+
}
19+
}
20+
}

src/SeqCli/Syntax/SeqSyntax.cs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System.Diagnostics.CodeAnalysis;
2-
using Seq.Syntax.Expressions;
1+
using Seq.Syntax.Expressions;
32

43
namespace SeqCli.Syntax;
54

@@ -9,20 +8,4 @@ public static CompiledExpression CompileExpression(string expression)
98
{
109
return SerilogExpression.Compile(expression, nameResolver: new SeqCliNameResolver());
1110
}
12-
}
13-
14-
class SeqCliNameResolver: NameResolver
15-
{
16-
public override bool TryResolveBuiltInPropertyName(string alias, [MaybeNullWhen(false)] out string target)
17-
{
18-
switch (alias)
19-
{
20-
case "@l":
21-
target = "coalesce(SeqCliOriginalLevel, @l)";
22-
return true;
23-
default:
24-
target = null;
25-
return false;
26-
}
27-
}
28-
}
11+
}

0 commit comments

Comments
 (0)