Skip to content

Commit 7393fc1

Browse files
andypeetersckadluba
authored andcommitted
Add trimming to rendered message and message template in case the database fields are smaller than the rendered text
1 parent edc036b commit 7393fc1

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ public KeyValuePair<string, object> GetStandardColumnNameAndValue(StandardColumn
4444
switch (column)
4545
{
4646
case StandardColumn.Message:
47-
return new KeyValuePair<string, object>(_columnOptions.Message.ColumnName, logEvent.RenderMessage(_formatProvider));
47+
return new KeyValuePair<string, object>(_columnOptions.Message.ColumnName, RenderLogMessage(logEvent));
4848
case StandardColumn.MessageTemplate:
49-
return new KeyValuePair<string, object>(_columnOptions.MessageTemplate.ColumnName, logEvent.MessageTemplate.Text);
49+
return new KeyValuePair<string, object>(_columnOptions.MessageTemplate.ColumnName, TrimMessageTemplate(logEvent));
5050
case StandardColumn.Level:
5151
return new KeyValuePair<string, object>(_columnOptions.Level.ColumnName, _columnOptions.Level.StoreAsEnum ? (object)logEvent.Level : logEvent.Level.ToString());
5252
case StandardColumn.TimeStamp:
@@ -62,6 +62,34 @@ public KeyValuePair<string, object> GetStandardColumnNameAndValue(StandardColumn
6262
}
6363
}
6464

65+
private string RenderLogMessage(LogEvent logEvent)
66+
{
67+
var logMessage = logEvent.RenderMessage(_formatProvider);
68+
var maxAllowedMessageLength = _columnOptions.Message.DataLength;
69+
70+
if (0 < maxAllowedMessageLength && logMessage.Length > maxAllowedMessageLength)
71+
{
72+
logMessage = logMessage.Substring(0, maxAllowedMessageLength - 3);
73+
logMessage = $"{logMessage}...";
74+
}
75+
76+
return logMessage;
77+
}
78+
79+
private string TrimMessageTemplate(LogEvent logEvent)
80+
{
81+
var messageTemplate = logEvent.MessageTemplate.Text;
82+
var maxAllowedMessageTemplateLength = _columnOptions.MessageTemplate.DataLength;
83+
84+
if (0 < maxAllowedMessageTemplateLength && messageTemplate.Length > maxAllowedMessageTemplateLength)
85+
{
86+
messageTemplate = messageTemplate.Substring(0, maxAllowedMessageTemplateLength - 3);
87+
messageTemplate = $"{messageTemplate}...";
88+
}
89+
90+
return messageTemplate;
91+
}
92+
6593
private KeyValuePair<string, object> GetTimeStampStandardColumnNameAndValue(LogEvent logEvent)
6694
{
6795
var dateTimeOffset = _columnOptions.TimeStamp.ConvertToUtc ? logEvent.Timestamp.ToUniversalTime() : logEvent.Timestamp;

0 commit comments

Comments
 (0)