1414
1515using System ;
1616using System . Globalization ;
17- using System . Linq ;
1817using System . Threading . Tasks ;
19- using Newtonsoft . Json . Linq ;
20- using Seq . Api . Model . Events ;
2118using SeqCli . Api ;
2219using SeqCli . Cli . Features ;
2320using SeqCli . Config ;
24- using SeqCli . Mapping ;
25- using SeqCli . Util ;
2621using Serilog ;
27- using Serilog . Events ;
28- using Serilog . Parsing ;
22+
2923// ReSharper disable UnusedType.Global
3024
3125namespace SeqCli . Cli . Commands ;
@@ -56,7 +50,7 @@ public SearchCommand()
5650 v => _count = int . Parse ( v , CultureInfo . InvariantCulture ) ) ;
5751
5852 _range = Enable < DateRangeFeature > ( ) ;
59- _output = Enable < OutputFormatFeature > ( ) ;
53+ _output = Enable ( new OutputFormatFeature ( supportNative : true ) ) ;
6054 _storagePath = Enable < StoragePathFeature > ( ) ;
6155 _signal = Enable < SignalExpressionFeature > ( ) ;
6256
@@ -77,7 +71,7 @@ protected override async Task<int> Run()
7771 try
7872 {
7973 var config = RuntimeConfigurationLoader . Load ( _storagePath ) ;
80- await using var output = _output . GetOutputFormat ( config ) . CreateOutputLogger ( ) ;
74+ var output = _output . GetOutputFormat ( config ) ;
8175 var connection = SeqConnectionFactory . Connect ( _connection , config ) ;
8276 connection . Client . HttpClient . Timeout = TimeSpan . FromMilliseconds ( _httpClientTimeout ) ;
8377
@@ -95,9 +89,10 @@ protected override async Task<int> Run()
9589 _count ,
9690 fromDateUtc : _range . Start ,
9791 toDateUtc : _range . End ,
98- trace : _trace ) )
92+ trace : _trace ,
93+ render : output . RequiresRender ) )
9994 {
100- output . Write ( ToSerilogEvent ( evt ) ) ;
95+ output . WriteEventEntity ( evt ) ;
10196 }
10297
10398 return 0 ;
@@ -114,9 +109,10 @@ protected override async Task<int> Run()
114109 _count ,
115110 fromDateUtc : _range . Start ,
116111 toDateUtc : _range . End ,
117- trace : _trace ) )
112+ trace : _trace ,
113+ render : output . RequiresRender ) )
118114 {
119- output . Write ( ToSerilogEvent ( evt ) ) ;
115+ output . WriteEventEntity ( evt ) ;
120116 }
121117
122118 return 0 ;
@@ -127,50 +123,4 @@ protected override async Task<int> Run()
127123 return 1 ;
128124 }
129125 }
130-
131- internal static LogEvent ToSerilogEvent ( EventEntity evt )
132- {
133- return new LogEvent (
134- DateTimeOffset . ParseExact ( evt . Timestamp , "o" , CultureInfo . InvariantCulture ) . ToLocalTime ( ) ,
135- LevelMapping . ToSerilogLevel ( evt . Level ) ,
136- string . IsNullOrWhiteSpace ( evt . Exception ) ? null : new TextException ( evt . Exception ) ,
137- new MessageTemplate ( evt . MessageTemplateTokens . Select ( ToMessageTemplateToken ) ) ,
138- evt . Properties
139- . Select ( p => CreateProperty ( p . Name , p . Value ) )
140- ) ;
141- }
142-
143- static MessageTemplateToken ToMessageTemplateToken ( MessageTemplateTokenPart token )
144- {
145- // Not ideal, we lose renderings, alignment etc. here.
146-
147- if ( token . Text != null )
148- return new TextToken ( token . Text ) ;
149- return new PropertyToken ( token . PropertyName , token . RawText ?? $ "{{{token.PropertyName}}}") ;
150- }
151-
152- static LogEventProperty CreateProperty ( string name , object value )
153- {
154- return LogEventPropertyFactory . SafeCreate ( name , CreatePropertyValue ( value ) ) ;
155- }
156-
157- static LogEventPropertyValue CreatePropertyValue ( object value )
158- {
159- switch ( value )
160- {
161- case JObject jo :
162- jo . TryGetValue ( "$typeTag" , out var tt ) ;
163- return new StructureValue (
164- jo . Properties ( )
165- . Where ( kvp => kvp . Name != "$typeTag" )
166- . Select ( kvp => CreateProperty ( kvp . Name , kvp . Value ) ) ,
167- ( tt as JValue ) ? . Value as string ) ;
168-
169- case JArray ja :
170- return new SequenceValue ( ja . Select ( CreatePropertyValue ) ) ;
171-
172- default :
173- return new ScalarValue ( value ) ;
174- }
175- }
176126}
0 commit comments