/// <summary> /// Gets the bytes to be written. /// </summary> /// <param name="logEvent">Log event.</param> /// <returns>Byte array.</returns> protected virtual byte[] GetBytesToWrite(LogEventInfo logEvent) { if (OptimizeBufferReuse) { if (!NewLine && logEvent.TryGetCachedLayoutValue(Layout, out var text)) { InternalLogger.Trace("{0} - Sending {1}", this, text); return(Encoding.GetBytes(text.ToString())); } else { using (var localBuilder = ReusableLayoutBuilder.Allocate()) { Layout.RenderAppendBuilder(logEvent, localBuilder.Result, false); if (NewLine) { localBuilder.Result.Append(LineEnding.NewLineCharacters); } InternalLogger.Trace("{0} - Sending {1} chars", this, localBuilder.Result.Length); using (var localBuffer = _reusableEncodingBuffer.Allocate()) { #if !SILVERLIGHT if (localBuilder.Result.Length <= localBuffer.Result.Length) { localBuilder.Result.CopyTo(0, localBuffer.Result, 0, localBuilder.Result.Length); return(Encoding.GetBytes(localBuffer.Result, 0, localBuilder.Result.Length)); } else #endif { var rendered = localBuilder.Result.ToString(); return(Encoding.GetBytes(rendered)); } } } } } else { var rendered = Layout.Render(logEvent); InternalLogger.Trace("{0} - Sending: {1}", this, rendered); if (NewLine) { rendered += LineEnding.NewLineCharacters; } return(Encoding.GetBytes(rendered)); } }
/// <summary> /// Writes the specified logging event to the attached debugger. /// </summary> /// <param name="logEvent">The logging event.</param> protected override void Write(LogEventInfo logEvent) { if (Debugger.IsLogging()) { string logMessage; using (var localTarget = ReusableLayoutBuilder.Allocate()) { Layout.RenderAppendBuilder(logEvent, localTarget.Result); localTarget.Result.Append('\n'); logMessage = localTarget.Result.ToString(); } Debugger.Log(logEvent.Level.Ordinal, logEvent.LoggerName, logMessage); } }
/// <summary> /// Writes the specified logging event to the attached debugger. /// </summary> /// <param name="logEvent">The logging event.</param> protected override void Write(LogEventInfo logEvent) { if (Debugger.IsLogging()) { string logMessage = string.Empty; if (OptimizeBufferReuse) { using (var localTarget = ReusableLayoutBuilder.Allocate()) { Layout.RenderAppendBuilder(logEvent, localTarget.Result); localTarget.Result.Append('\n'); logMessage = localTarget.Result.ToString(); } } else { logMessage = RenderLogEvent(Layout, logEvent) + "\n"; } Debugger.Log(logEvent.Level.Ordinal, logEvent.LoggerName, logMessage); } }
/// <summary> /// Gets the bytes to be written. /// </summary> /// <param name="logEvent">Log event.</param> /// <returns>Byte array.</returns> protected virtual byte[] GetBytesToWrite(LogEventInfo logEvent) { using (var localBuffer = _reusableEncodingBuffer.Allocate()) { if (!NewLine && logEvent.TryGetCachedLayoutValue(Layout, out var text)) { return(GetBytesFromString(localBuffer.Result, text?.ToString() ?? string.Empty)); } else { using (var localBuilder = ReusableLayoutBuilder.Allocate()) { Layout.RenderAppendBuilder(logEvent, localBuilder.Result, false); if (NewLine) { localBuilder.Result.Append(LineEnding.NewLineCharacters); } return(GetBytesFromStringBuilder(localBuffer.Result, localBuilder.Result)); } } } }
internal object[] ConvetToParameterArray(LogEventInfo logEvent, bool ignoreGroupParameters) { object[] parameters = new object[Parameters.Count]; for (int i = 0; i < parameters.Length; ++i) { var param = Parameters[i]; if (!param.EnableGroupLayout) { var parameterValue = RenderLogEvent(param.Layout, logEvent); parameters[i] = Convert.ChangeType(parameterValue, param.ParameterType, CultureInfo.InvariantCulture); } else if (!ignoreGroupParameters) { using (var targetBuilder = OptimizeBufferReuse ? ReusableLayoutBuilder.Allocate() : ReusableLayoutBuilder.None) { StringBuilder sb = targetBuilder.Result ?? new StringBuilder(); if (param.GroupHeaderLayout != null) { param.GroupHeaderLayout.RenderAppendBuilder(logEvent, sb); } if (param.Layout != null) { param.Layout.RenderAppendBuilder(logEvent, sb); } if (param.GroupFooterLayout != null) { param.GroupFooterLayout.RenderAppendBuilder(logEvent, sb); } parameters[i] = sb.ToString(); } } } return(parameters); }
/// <summary> /// Gets the bytes to be written. /// </summary> /// <param name="logEvent">Log event.</param> /// <returns>Byte array.</returns> protected virtual byte[] GetBytesToWrite(LogEventInfo logEvent) { if (OptimizeBufferReuse) { using (var localBuffer = _reusableEncodingBuffer.Allocate()) { if (!NewLine && logEvent.TryGetCachedLayoutValue(Layout, out var text)) { return(GetBytesFromString(localBuffer.Result, text?.ToString() ?? string.Empty)); } else { using (var localBuilder = ReusableLayoutBuilder.Allocate()) { Layout.RenderAppendBuilder(logEvent, localBuilder.Result, false); if (NewLine) { localBuilder.Result.Append(LineEnding.NewLineCharacters); } return(GetBytesFromStringBuilder(localBuffer.Result, localBuilder.Result)); } } } } else { var rendered = Layout.Render(logEvent); InternalLogger.Trace("NetworkTarget(Name={0}): Sending: {1}", Name, rendered); if (NewLine) { rendered += LineEnding.NewLineCharacters; } return(Encoding.GetBytes(rendered)); } }
internal string ConvertParameterGroupValue(IList <AsyncLogEventInfo> logEvents, MethodCallParameter param) { using (var targetBuilder = OptimizeBufferReuse && logEvents.Count <= 1000 ? ReusableLayoutBuilder.Allocate() : ReusableLayoutBuilder.None) { StringBuilder sb = targetBuilder.Result ?? new StringBuilder(); if (param.GroupHeaderLayout != null) { param.GroupHeaderLayout.RenderAppendBuilder(logEvents[0].LogEvent, sb); } for (int x = 0; x < logEvents.Count; ++x) { if (x != 0 && param.GroupItemSeparatorLayout != null) { param.GroupItemSeparatorLayout.RenderAppendBuilder(logEvents[x].LogEvent, sb); } if (param.Layout != null) { // If payload becomes too big, then use local StringBuilder to avoid json-maxlength-validation if (sb.Length < MaxGroupRenderSingleBufferLength) { param.Layout.RenderAppendBuilder(logEvents[x].LogEvent, sb); } else { using (var localTarget = new AppendBuilderCreator(sb, true)) { param.Layout.RenderAppendBuilder(logEvents[x].LogEvent, localTarget.Builder); } } } } if (param.GroupFooterLayout != null) { param.GroupFooterLayout.RenderAppendBuilder(logEvents[logEvents.Count - 1].LogEvent, sb); } return(sb.ToString()); } }