Skip to content

Commit a7ee0b8

Browse files
authored
Pre-encode property names of the JSON (#93)
1 parent b91747b commit a7ee0b8

File tree

3 files changed

+40
-27
lines changed

3 files changed

+40
-27
lines changed

.changeset/grumpy-paws-vanish.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"alexaka1.serilog.extensions.formatting": patch
3+
---
4+
5+
Small performance increase by pre-encoding the default property names, to be able to write them to stream as-is.

src/Serilog.Extensions.Formatting/JsonLogPropertyNames.cs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ internal readonly struct JsonLogPropertyNames
66
{
77
public JsonLogPropertyNames(JsonNamingPolicy namingPolicy)
88
{
9-
Timestamp = namingPolicy.ConvertName(TimestampPropertyName);
10-
Level = namingPolicy.ConvertName(LevelPropertyName);
11-
MessageTemplate = namingPolicy.ConvertName(MessageTemplatePropertyName);
12-
RenderedMessage = namingPolicy.ConvertName(RenderedMessagePropertyName);
13-
TraceId = namingPolicy.ConvertName(TraceIdPropertyName);
14-
SpanId = namingPolicy.ConvertName(SpanIdPropertyName);
15-
Exception = namingPolicy.ConvertName(ExceptionPropertyName);
16-
Properties = namingPolicy.ConvertName(PropertiesPropertyName);
17-
Renderings = namingPolicy.ConvertName(RenderingsPropertyName);
18-
Null = namingPolicy.ConvertName(NullPropertyName);
19-
TypeTag = namingPolicy.ConvertName(TypeTagPropertyName);
20-
Format = namingPolicy.ConvertName(FormatPropertyName);
21-
Rendering = namingPolicy.ConvertName(RenderingPropertyName);
9+
Timestamp = JsonEncodedText.Encode(namingPolicy.ConvertName(TimestampPropertyName));
10+
Level = JsonEncodedText.Encode(namingPolicy.ConvertName(LevelPropertyName));
11+
MessageTemplate = JsonEncodedText.Encode(namingPolicy.ConvertName(MessageTemplatePropertyName));
12+
RenderedMessage = JsonEncodedText.Encode(namingPolicy.ConvertName(RenderedMessagePropertyName));
13+
TraceId = JsonEncodedText.Encode(namingPolicy.ConvertName(TraceIdPropertyName));
14+
SpanId = JsonEncodedText.Encode(namingPolicy.ConvertName(SpanIdPropertyName));
15+
Exception = JsonEncodedText.Encode(namingPolicy.ConvertName(ExceptionPropertyName));
16+
Properties = JsonEncodedText.Encode(namingPolicy.ConvertName(PropertiesPropertyName));
17+
Renderings = JsonEncodedText.Encode(namingPolicy.ConvertName(RenderingsPropertyName));
18+
Null = JsonEncodedText.Encode(namingPolicy.ConvertName(NullPropertyName));
19+
TypeTag = JsonEncodedText.Encode(namingPolicy.ConvertName(TypeTagPropertyName));
20+
Format = JsonEncodedText.Encode(namingPolicy.ConvertName(FormatPropertyName));
21+
Rendering = JsonEncodedText.Encode(namingPolicy.ConvertName(RenderingPropertyName));
2222
}
2323

2424
private const string TimestampPropertyName = "Timestamp";
@@ -35,18 +35,18 @@ public JsonLogPropertyNames(JsonNamingPolicy namingPolicy)
3535
private const string FormatPropertyName = "Format";
3636
private const string RenderingPropertyName = "Rendering";
3737

38-
public string Timestamp { get; }
39-
public string Level { get; }
40-
public string MessageTemplate { get; }
41-
public string RenderedMessage { get; }
42-
public string TraceId { get; }
43-
public string SpanId { get; }
44-
public string Exception { get; }
45-
public string Properties { get; }
46-
public string Renderings { get; }
47-
public string Null { get; }
48-
public string TypeTag { get; }
49-
public string Format { get; }
50-
public string Rendering { get; }
38+
public JsonEncodedText Timestamp { get; }
39+
public JsonEncodedText Level { get; }
40+
public JsonEncodedText MessageTemplate { get; }
41+
public JsonEncodedText RenderedMessage { get; }
42+
public JsonEncodedText TraceId { get; }
43+
public JsonEncodedText SpanId { get; }
44+
public JsonEncodedText Exception { get; }
45+
public JsonEncodedText Properties { get; }
46+
public JsonEncodedText Renderings { get; }
47+
public JsonEncodedText Null { get; }
48+
public JsonEncodedText TypeTag { get; }
49+
public JsonEncodedText Format { get; }
50+
public JsonEncodedText Rendering { get; }
5151
}
5252
}

src/Serilog.Extensions.Formatting/Utf8JsonFormatter.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,15 @@ private void VisitDictionaryValue(DictionaryValue dictionary, Utf8JsonWriter wri
233233
foreach (var element in dictionary.Elements)
234234
{
235235
string key = element.Key.Value?.ToString();
236-
writer.WritePropertyName(key != null ? _namingPolicy.ConvertName(key) : _names.Null);
236+
if (key != null)
237+
{
238+
writer.WritePropertyName(_namingPolicy.ConvertName(key));
239+
}
240+
else
241+
{
242+
writer.WritePropertyName(_names.Null);
243+
}
244+
237245
Format(element.Value, writer);
238246
}
239247

0 commit comments

Comments
 (0)