private void RenderColumnLayout(LogEventInfo logEvent, Layout columnLayout, CsvQuotingMode quoting, StringBuilder target, int i) { if (i != 0) { target.Append(_actualColumnDelimiter); } if (quoting == CsvQuotingMode.All) { target.Append(QuoteChar); } int orgLength = target.Length; columnLayout.RenderAppendBuilder(logEvent, target); if (orgLength != target.Length && ColumnValueRequiresQuotes(quoting, target, orgLength)) { string columnValue = target.ToString(orgLength, target.Length - orgLength); target.Length = orgLength; if (quoting != CsvQuotingMode.All) { target.Append(QuoteChar); } target.Append(columnValue.Replace(QuoteChar, _doubleQuoteChar)); target.Append(QuoteChar); } else { if (quoting == CsvQuotingMode.All) { target.Append(QuoteChar); } } }
/// <summary> /// Formats the log event relying on inner layouts. /// </summary> /// <param name="logEvent">The logging event.</param> /// <param name="target"><see cref="StringBuilder"/> for the result</param> protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target) { //Memory profiling pointed out that using a foreach-loop was allocating //an Enumerator. Switching to a for-loop avoids the memory allocation. for (int i = 0; i < Layouts.Count; i++) { Layout layout = Layouts[i]; layout.RenderAppendBuilder(logEvent, target); } }
/// <summary> /// Renders the layout for the specified logging event by invoking layout renderers. /// </summary> /// <param name="logEvent">The logging event.</param> /// <param name="target"><see cref="System.Text.StringBuilder"/> for the result.</param> protected override void RenderFormattedMessage(LogEventInfo logEvent, System.Text.StringBuilder target) { Layout.RenderAppendBuilder(logEvent, target); }