Exemple #1
0
        public string FormatSlow(Entry entry)
        {
            int slotNumber;
            var builder = FixedStringBuilderPool.Get(out slotNumber);

            try
            {
                var dt = entry.TimeStamp;
                builder.AppendDigitsFast(dt.Hour, 2);
                builder.Append(':');
                builder.AppendDigitsFast(dt.Minute, 2);
                builder.Append(':');
                builder.AppendDigitsFast(dt.Second, 2);
                builder.Append(':');
                builder.AppendDigitsFast(dt.Millisecond, 3);

                builder.Append("|");
                builder.Append(LogLevels.Levels[(int)entry.Level]);
                builder.Append("|");
                builder.AppendDigitsFast(LogEnvironment.CurrentManagedThreadId, 2, ' ');
                builder.Append("|");
                builder.Append(entry.Tag);
                builder.Append("|");

                if (_categoryFormatter != null)
                {
                    builder.Append(_categoryFormatter.GetString(entry.Category));
                    builder.Append("|");
                }

                builder.Append(entry.Message);
                if (entry.Exception != null)
                {
                    builder.Append(" --> ");

                    string exceptionString = entry.Exception.ToString();
                    if (_doAsyncExceptionCleanup)
                    {
                        exceptionString = ExceptionUtil.CleanStackTrace(exceptionString);
                    }

                    builder.Append(exceptionString);
                }

                builder.AppendLine();

                return(builder.ToString());
            }
            finally
            {
                FixedStringBuilderPool.Return(slotNumber, builder);
            }
        }
Exemple #2
0
        public string Format(Entry entry)
        {
            int slotNumber;
            var builder = FixedStringBuilderPool.Get(out slotNumber);

            try
            {
                // This line looks strange but represents required format
                // http://help.papertrailapp.com/kb/configuration/configuring-remote-syslog-from-embedded-or-proprietary-systems/
                builder.Append($"<22>1 {entry.TimeStamp.ToString("s")} {_uniqueId} {_applicationName} - - - ");

                builder.Append(LogLevels.Levels[(int)entry.Level]);
                builder.Append("|");
                builder.Append(LogEnvironment.CurrentManagedThreadId.ToString());
                builder.Append("|");
                builder.Append(entry.Tag);
                builder.Append("|");

                if (_categoryFormatter != null)
                {
                    builder.Append(_categoryFormatter.GetString(entry.Category));
                    builder.Append("|");
                }

                builder.Append(entry.Message);
                if (entry.Exception != null)
                {
                    builder.Append(" --> ");
                    var exceptionString = entry.Exception.ToString();

                    if (_doAsyncExceptionCleanup)
                    {
                        exceptionString = ExceptionUtil.CleanStackTrace(exceptionString);
                    }

                    builder.Append(exceptionString);
                }

                builder.AppendLine();

                return(builder.ToString());
            }
            finally
            {
                FixedStringBuilderPool.Return(slotNumber, builder);
            }
        }
        public string Format(Entry entry)
        {
            int slotNumber;
            var builder = FixedStringBuilderPool.Get(out slotNumber);

            try
            {
                builder.Append(entry.TimeStamp.ToString("HH:mm:ss:fff"));
                builder.Append("|");
                builder.Append(LogLevels.Levels[(int)entry.Level]);
                builder.Append("|");
                builder.Append(LogEnvironment.CurrentManagedThreadId.ToString());
                builder.Append("|");
                builder.Append(entry.Tag);
                builder.Append("|");

                if (_categoryFormatter != null)
                {
                    builder.Append(_categoryFormatter.GetString(entry.Category));
                    builder.Append("|");
                }

                builder.Append(entry.Message);
                if (entry.Exception != null)
                {
                    builder.Append(" --> ");
                    var exceptionString = entry.Exception.ToString();

                    if (_doAsyncExceptionCleanup)
                    {
                        exceptionString = ExceptionUtil.CleanStackTrace(exceptionString);
                    }

                    builder.Append(exceptionString);
                }

                return(builder.ToString());
            }
            finally
            {
                FixedStringBuilderPool.Return(slotNumber, builder);
            }
        }
Exemple #4
0
        public unsafe string Format(Entry entry)
        {
            int len = 25 + entry.Tag.Length + entry.Message.Length;

            // This fallback is needed because of possible huge stack allocation.
            if (len > 100 * 1024)
            {
                return(FormatSlow(entry));
            }

            string categoryString  = null;
            string exceptionString = null;

            if (_categoryFormatter != null)
            {
                categoryString = _categoryFormatter.GetString(entry.Category);

                len += categoryString.Length + 1;
            }

            if (entry.Exception != null)
            {
                exceptionString = entry.Exception.ToString();

                if (_doAsyncExceptionCleanup)
                {
                    exceptionString = ExceptionUtil.CleanStackTrace(exceptionString);
                }

                len += exceptionString.Length + 5;
            }

            char *charBuffer = stackalloc char[len];
            char *ptr        = charBuffer;

            var dt = entry.TimeStamp;

            AppendDigitsFast(ref ptr, dt.Hour, 2);
            Append(&ptr, ':');
            AppendDigitsFast(ref ptr, dt.Minute, 2);
            Append(&ptr, ':');
            AppendDigitsFast(ref ptr, dt.Second, 2);
            Append(&ptr, ':');
            AppendDigitsFast(ref ptr, dt.Millisecond, 3);
            Append(&ptr, '|');

            Append(&ptr, LogLevels.Levels[(int)entry.Level]);

            Append(&ptr, '|');
            AppendDigitsFast(ref ptr, LogEnvironment.CurrentManagedThreadId, 2, ' ');
            Append(&ptr, '|');
            Append(&ptr, entry.Tag);
            Append(&ptr, '|');

            if (_categoryFormatter != null)
            {
                Append(&ptr, categoryString);
                Append(&ptr, '|');
            }

            Append(&ptr, entry.Message);

            if (entry.Exception != null)
            {
                Append(&ptr, " --> ");
                Append(&ptr, exceptionString);
            }

            Append(&ptr, '\r');
            Append(&ptr, '\n');

            return(new string(charBuffer, 0, len));
        }
        public string Format(Entry entry)
        {
            var timestamp = $"{entry.TimeStamp:yyyy-MM-dd'T'HH:mm:ss.fff}{entry.TimeStamp.Ticks:+;-;}{entry.TimeStamp:hhmm}";

            string teamcityStatus;

            switch (entry.Level)
            {
            case LogLevel.Trace:
            case LogLevel.Debug:
            case LogLevel.Info:
                teamcityStatus = "NORMAL";
                break;

            case LogLevel.Warn:
                teamcityStatus = "WARNING";
                break;

            case LogLevel.Error:
                teamcityStatus = "ERROR";
                break;

            case LogLevel.Fatal:
                teamcityStatus = "FAILURE";
                break;

            default:
                teamcityStatus = "NORMAL";
                break;
            }

            var errorDetails = string.Empty;

            if (entry.Exception != null)
            {
                errorDetails = entry.Exception.ToString();
                if (_doAsyncExceptionCleanup)
                {
                    errorDetails = ExceptionUtil.CleanStackTrace(errorDetails);
                }
            }

            var message = entry.Message;

            if (message.Contains("\n"))
            {
                var messageLines  = message.Split(new[] { '\n' }, StringSplitOptions.None);
                var stringBuilder = new StringBuilder(message.Length + messageLines.Length + 1);
                lock (MultilineLock)
                {
                    foreach (var messageLine in messageLines)
                    {
                        var teamCityStatusMessage = TeamCityStatusMessage(_flowIdClause, messageLine, timestamp, errorDetails, teamcityStatus);
                        stringBuilder.AppendLine(teamCityStatusMessage);
                    }
                }

                return(stringBuilder.ToString());
            }
            else
            {
                return(TeamCityStatusMessage(_flowIdClause, message, timestamp, errorDetails, teamcityStatus));
            }
        }