Skip to content

Commit c8b9428

Browse files
authored
Merge pull request #178 from cirilomegg/dev
Make sure the JSON has a valid structure
2 parents 8182532 + e68c7b7 commit c8b9428

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/JsonLogEventFormatter.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2018 Serilog Contributors
1+
// Copyright 2018 Serilog Contributors
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ namespace Serilog.Sinks.MSSqlServer
2929
internal class JsonLogEventFormatter : ITextFormatter
3030
{
3131
static readonly JsonValueFormatter ValueFormatter = new JsonValueFormatter(typeTagName: null);
32+
private const string COMMA_DELIMITER = ",";
3233

3334
MSSqlServerSinkTraits traits;
3435

@@ -52,6 +53,8 @@ public void Format(LogEvent logEvent, TextWriter output)
5253

5354
output.Write("{");
5455

56+
string precedingDelimiter = "";
57+
5558
if (traits.columnOptions.LogEvent.ExcludeStandardColumns == false)
5659
{
5760
// The XML Properties column has never included the Standard Columns, but prior
@@ -63,7 +66,6 @@ public void Format(LogEvent logEvent, TextWriter output)
6366
// whether Standard Columns are written (specifically, the subset of Standard
6467
// columns that were output by the external JsonFormatter class).
6568

66-
string precedingDelimiter = "";
6769
var store = traits.columnOptions.Store;
6870

6971
WriteIfPresent(StandardColumn.TimeStamp);
@@ -77,7 +79,7 @@ void WriteIfPresent(StandardColumn col)
7779
if(store.Contains(col))
7880
{
7981
output.Write(precedingDelimiter);
80-
precedingDelimiter = ",";
82+
precedingDelimiter = COMMA_DELIMITER;
8183
var colData = traits.GetStandardColumnNameAndValue(col, logEvent);
8284
JsonValueFormatter.WriteQuotedJsonString(colData.Key, output);
8385
output.Write(":");
@@ -88,7 +90,11 @@ void WriteIfPresent(StandardColumn col)
8890
}
8991

9092
if (logEvent.Properties.Count != 0)
93+
{
94+
output.Write(precedingDelimiter);
9195
WriteProperties(logEvent.Properties, output);
96+
precedingDelimiter = COMMA_DELIMITER;
97+
}
9298

9399
var tokensWithFormat = logEvent.MessageTemplate.Tokens
94100
.OfType<PropertyToken>()
@@ -98,6 +104,7 @@ void WriteIfPresent(StandardColumn col)
98104

99105
if (tokensWithFormat.Length != 0)
100106
{
107+
output.Write(precedingDelimiter);
101108
WriteRenderings(tokensWithFormat, logEvent.Properties, output);
102109
}
103110

@@ -106,13 +113,13 @@ void WriteIfPresent(StandardColumn col)
106113

107114
static void WriteProperties(IReadOnlyDictionary<string, LogEventPropertyValue> properties, TextWriter output)
108115
{
109-
output.Write(",\"Properties\":{");
116+
output.Write("\"Properties\":{");
110117

111118
string precedingDelimiter = "";
112119
foreach (var property in properties)
113120
{
114121
output.Write(precedingDelimiter);
115-
precedingDelimiter = ",";
122+
precedingDelimiter = COMMA_DELIMITER;
116123
JsonValueFormatter.WriteQuotedJsonString(property.Key, output);
117124
output.Write(':');
118125
ValueFormatter.Format(property.Value, output);
@@ -123,13 +130,13 @@ static void WriteProperties(IReadOnlyDictionary<string, LogEventPropertyValue> p
123130

124131
static void WriteRenderings(IEnumerable<IGrouping<string, PropertyToken>> tokensWithFormat, IReadOnlyDictionary<string, LogEventPropertyValue> properties, TextWriter output)
125132
{
126-
output.Write(",\"Renderings\":{");
133+
output.Write("\"Renderings\":{");
127134

128135
string precedingDelimiter = "";
129136
foreach (var ptoken in tokensWithFormat)
130137
{
131138
output.Write(precedingDelimiter);
132-
precedingDelimiter = ",";
139+
precedingDelimiter = COMMA_DELIMITER;
133140

134141
JsonValueFormatter.WriteQuotedJsonString(ptoken.Key, output);
135142
output.Write(":[");
@@ -138,7 +145,7 @@ static void WriteRenderings(IEnumerable<IGrouping<string, PropertyToken>> tokens
138145
foreach (var format in ptoken)
139146
{
140147
output.Write(fdelim);
141-
fdelim = ",";
148+
fdelim = COMMA_DELIMITER;
142149

143150
output.Write("{\"Format\":");
144151
JsonValueFormatter.WriteQuotedJsonString(format.Format, output);

0 commit comments

Comments
 (0)