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); } }
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); } }
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)); } }