Skip to content

Commit 6495d3c

Browse files
committed
refactor: re-use original structure & method signatures
1 parent 46fb69e commit 6495d3c

13 files changed

+121
-172
lines changed

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/ConsoleArgBuilder.cs

Lines changed: 0 additions & 101 deletions
This file was deleted.

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/EventPropertyTokenRenderer.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// limitations under the License.
1414

1515
using System;
16-
using System.Collections.Generic;
1716
using System.IO;
1817
using Serilog.Events;
1918
using Serilog.Parsing;
@@ -32,16 +31,14 @@ public EventPropertyTokenRenderer(PropertyToken token, IFormatProvider formatPro
3231
_formatProvider = formatProvider;
3332
}
3433

35-
public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
34+
public override void Render(LogEvent logEvent, TokenEmitter emitToken)
3635
{
3736
// If a property is missing, don't render anything (message templates render the raw token here).
3837
if (!logEvent.Properties.TryGetValue(_token.PropertyName, out var propertyValue))
3938
{
4039
if (_token.Alignment is not null)
41-
{
42-
yield return ConsoleArgBuilder.Template(Padding.Apply(string.Empty, _token.Alignment));
43-
}
44-
yield break;
40+
emitToken(SConsoleToken.String(Padding.Apply(string.Empty, _token.Alignment)));
41+
return;
4542
}
4643

4744
var writer = new StringWriter();
@@ -60,9 +57,9 @@ public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
6057

6158
var str = writer.ToString();
6259
if (_token.Alignment is not null)
63-
yield return ConsoleArgBuilder.String(Padding.Apply(str, _token.Alignment));
60+
emitToken(SConsoleToken.String(Padding.Apply(str, _token.Alignment)));
6461
else
65-
yield return ConsoleArgBuilder.String(str);
62+
emitToken(SConsoleToken.String(str));
6663
}
6764
}
6865
}

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/ExceptionTokenRenderer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ namespace Serilog.Sinks.BrowserConsole.Output
2020
{
2121
class ExceptionTokenRenderer : OutputTemplateTokenRenderer
2222
{
23-
public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
23+
public override void Render(LogEvent logEvent, TokenEmitter emitToken)
2424
{
2525
if (logEvent.Exception is not null)
26-
yield return ConsoleArgBuilder.String(logEvent.Exception.ToString());
26+
emitToken(SConsoleToken.String(logEvent.Exception.ToString()));
2727
}
2828
}
2929
}

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/LevelTokenRenderer.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
using Serilog.Events;
1616
using Serilog.Parsing;
1717
using Serilog.Sinks.BrowserConsole.Rendering;
18-
using System.Collections.Generic;
1918

2019
namespace Serilog.Sinks.BrowserConsole.Output
2120
{
@@ -28,11 +27,11 @@ public LevelTokenRenderer(PropertyToken levelToken)
2827
_levelToken = levelToken;
2928
}
3029

31-
public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
30+
public override void Render(LogEvent logEvent, TokenEmitter emitToken)
3231
{
3332
var moniker = LevelOutputFormat.GetLevelMoniker(logEvent.Level, _levelToken.Format);
3433
var alignedOutput = Padding.Apply(moniker, _levelToken.Alignment);
35-
yield return ConsoleArgBuilder.String(alignedOutput);
34+
emitToken(SConsoleToken.String(alignedOutput));
3635
}
3736
}
3837
}

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/MessageTemplateOutputTokenRenderer.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,25 @@
1313
// limitations under the License.
1414

1515
using System;
16-
using System.Collections.Generic;
1716
using Serilog.Events;
1817
using Serilog.Parsing;
1918

2019
namespace Serilog.Sinks.BrowserConsole.Output
2120
{
2221
class MessageTemplateOutputTokenRenderer : OutputTemplateTokenRenderer
2322
{
24-
public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
23+
public override void Render(LogEvent logEvent, TokenEmitter emitToken)
2524
{
2625
foreach (var token in logEvent.MessageTemplate.Tokens)
2726
{
2827
switch (token)
2928
{
3029
case TextToken tt:
31-
foreach(var argBuilder in new TextTokenRenderer(tt.Text).ConsoleArgs(logEvent)){
32-
yield return argBuilder;
33-
}
30+
new TextTokenRenderer(tt.Text).Render(logEvent, emitToken);
3431
break;
3532
case PropertyToken pt:
3633
if (logEvent.Properties.TryGetValue(pt.PropertyName, out var propertyValue))
37-
{
38-
yield return ConsoleArgBuilder.Object(propertyValue);
39-
}
34+
emitToken(SConsoleToken.Object(propertyValue));
4035
break;
4136
default:
4237
throw new InvalidOperationException();

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/NewLineTokenRenderer.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// limitations under the License.
1414

1515
using System;
16-
using System.Collections.Generic;
1716
using Serilog.Events;
1817
using Serilog.Parsing;
1918
using Serilog.Sinks.BrowserConsole.Rendering;
@@ -29,12 +28,12 @@ public NewLineTokenRenderer(Alignment? alignment)
2928
_alignment = alignment;
3029
}
3130

32-
public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
31+
public override void Render(LogEvent logEvent, TokenEmitter emitToken)
3332
{
3433
if (_alignment is not null)
35-
yield return ConsoleArgBuilder.Template(Padding.Apply(Environment.NewLine, _alignment.Value.Widen(Environment.NewLine.Length)));
34+
emitToken(SConsoleToken.Template(Padding.Apply(Environment.NewLine, _alignment.Value.Widen(Environment.NewLine.Length))));
3635
else
37-
yield return ConsoleArgBuilder.Template(Environment.NewLine);
36+
emitToken(SConsoleToken.Template(Environment.NewLine));
3837
}
3938
}
4039
}

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/OutputTemplateRenderer.cs

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,52 +21,54 @@ public OutputTemplateRenderer(string outputTemplate, IFormatProvider formatProvi
2121
.SelectMany(token => token switch
2222
{
2323
TextToken tt => new[] { new TextTokenRenderer(tt.Text) },
24-
PropertyToken pt => WrapStyle(pt, tokenStyles, pt.PropertyName switch
25-
{
26-
OutputProperties.LevelPropertyName => new LevelTokenRenderer(pt),
27-
OutputProperties.NewLinePropertyName => new NewLineTokenRenderer(pt.Alignment),
28-
OutputProperties.ExceptionPropertyName => new ExceptionTokenRenderer(),
29-
OutputProperties.MessagePropertyName => new MessageTemplateOutputTokenRenderer(),
30-
OutputProperties.TimestampPropertyName => new TimestampTokenRenderer(pt, formatProvider),
31-
OutputProperties.PropertiesPropertyName => new PropertiesTokenRenderer(pt, template),
32-
_ => new EventPropertyTokenRenderer(pt, formatProvider)
33-
}),
24+
PropertyToken pt => WrapTokenStyle(
25+
tokenStyles.GetValueOrDefault(pt.PropertyName),
26+
pt.PropertyName switch
27+
{
28+
OutputProperties.LevelPropertyName => new LevelTokenRenderer(pt),
29+
OutputProperties.NewLinePropertyName => new NewLineTokenRenderer(pt.Alignment),
30+
OutputProperties.ExceptionPropertyName => new ExceptionTokenRenderer(),
31+
OutputProperties.MessagePropertyName => new MessageTemplateOutputTokenRenderer(),
32+
OutputProperties.TimestampPropertyName => new TimestampTokenRenderer(pt, formatProvider),
33+
OutputProperties.PropertiesPropertyName => new PropertiesTokenRenderer(pt, template),
34+
_ => new EventPropertyTokenRenderer(pt, formatProvider)
35+
}),
3436
_ => throw new InvalidOperationException()
3537
})
3638
.ToArray();
3739
}
3840

39-
private IEnumerable<OutputTemplateTokenRenderer> WrapStyle(PropertyToken token, IReadOnlyDictionary<string, string> tokenStyles, OutputTemplateTokenRenderer renderer)
40-
{
41-
if (tokenStyles?.TryGetValue(token.PropertyName, out var style) ?? false)
42-
{
43-
return new[]
41+
private static IEnumerable<OutputTemplateTokenRenderer> WrapTokenStyle(string style, OutputTemplateTokenRenderer renderer) =>
42+
style != null ?
43+
new[]
4444
{
45-
new TextTokenRenderer($"<<{style}>>"),
46-
renderer,
47-
new TextTokenRenderer("<<_>>")
48-
};
49-
}
50-
else
51-
{
52-
return new[] { renderer };
53-
}
54-
}
45+
new StyleTokenRenderer(style),
46+
renderer,
47+
new StyleTokenRenderer("")
48+
} :
49+
new[] { renderer };
5550

5651
public object[] Format(LogEvent logEvent)
5752
{
5853
if (logEvent is null) throw new ArgumentNullException(nameof(logEvent));
5954

60-
var templateBuilder = new StringBuilder();
61-
var buffer = new List<object>(_renderers.Length * 2);
55+
var buffer = new List<SConsoleToken>(_renderers.Length * 2);
6256
foreach (var renderer in _renderers)
6357
{
64-
foreach (var consoleToken in renderer.ConsoleArgs(logEvent))
58+
renderer.Render(logEvent, buffer.Add);
59+
}
60+
61+
var templateBuilder = new StringBuilder();
62+
var argsList = new List<object>(buffer.Count);
63+
foreach (var token in buffer)
64+
{
65+
templateBuilder.Append(token.TemplateStr);
66+
if (token.Arg is not null)
6567
{
66-
consoleToken.Render(templateBuilder, buffer.Add);
68+
argsList.Add(token.Arg.Value);
6769
}
6870
}
69-
return buffer.Prepend(templateBuilder.ToString()).ToArray();
71+
return new object[] { templateBuilder.ToString() }.Concat(argsList).ToArray();
7072
}
7173
}
7274
}

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/OutputTemplateTokenRenderer.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@
1313
// limitations under the License.
1414

1515
using Serilog.Events;
16-
using System.Collections.Generic;
1716

1817
namespace Serilog.Sinks.BrowserConsole.Output
1918
{
20-
delegate void TokenEmitter(object token);
19+
delegate void TokenEmitter(SConsoleToken token);
2120

2221
abstract class OutputTemplateTokenRenderer
2322
{
24-
public abstract IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent);
23+
public abstract void Render(LogEvent logEvent, TokenEmitter emitToken);
2524
}
2625
}

src/Serilog.Sinks.BrowserConsole/Sinks/BrowserConsole/Output/PropertiesTokenRenderer.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
using System.Collections.Generic;
1615
using System.Linq;
1716
using Serilog.Events;
1817
using Serilog.Parsing;
@@ -29,7 +28,7 @@ public PropertiesTokenRenderer(PropertyToken token, MessageTemplate outputTempla
2928
_token = token;
3029
}
3130

32-
public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
31+
public override void Render(LogEvent logEvent, TokenEmitter emitToken)
3332
{
3433
var included = logEvent.Properties
3534
.Where(p => !TemplateContainsPropertyName(logEvent.MessageTemplate, p.Key) &&
@@ -38,7 +37,7 @@ public override IEnumerable<ConsoleArgBuilder> ConsoleArgs(LogEvent logEvent)
3837

3938
foreach (var property in included)
4039
{
41-
yield return ConsoleArgBuilder.Object(property.Value, _token.Format);
40+
emitToken(SConsoleToken.Object(property.Value, _token.Format));
4241
}
4342
}
4443

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Serilog.Events;
2+
3+
namespace Serilog.Sinks.BrowserConsole.Output
4+
{
5+
/// <summary>
6+
/// Used to generate `console.log` arguments.
7+
/// </summary>
8+
internal struct SConsoleToken
9+
{
10+
public SConsoleToken(string templateStr, ScalarValue arg = null)
11+
{
12+
TemplateStr = templateStr;
13+
Arg = arg;
14+
}
15+
public string TemplateStr { get; init; }
16+
public ScalarValue Arg { get; init; }
17+
18+
public static SConsoleToken Style(string style) => new("%c", new ScalarValue(style));
19+
public static SConsoleToken Template(string rawText) => new(rawText.Replace("%", "%%"));
20+
public static SConsoleToken String(string @string) => new("%s", new ScalarValue(@string));
21+
public static SConsoleToken Object(LogEventPropertyValue value, string format = default) => new("%o", new ScalarValue(ObjectModelInterop.ToInteropValue(value, format)));
22+
}
23+
}

0 commit comments

Comments
 (0)