コード例 #1
0
ファイル: NetworkTarget.cs プロジェクト: zuohu/NLog
        /// <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));
            }
        }
コード例 #2
0
ファイル: DebuggerTarget.cs プロジェクト: tetrascience/OSS
        /// <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);
            }
        }
コード例 #3
0
        /// <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);
            }
        }
コード例 #4
0
ファイル: NetworkTarget.cs プロジェクト: tetrascience/OSS
        /// <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));
                    }
                }
            }
        }
コード例 #5
0
        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));
            }
        }
コード例 #7
0
        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());
            }
        }