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);
}
switch (_lineEnding)
{
case LineEnding.CR:
builder.Append('\r');
break;
case LineEnding.LF:
builder.Append('\n');
break;
case LineEnding.CRLF:
builder.Append('\r');
builder.Append('\n');
break;
}
return builder.ToString();
}
finally
{
FixedStringBuilderPool.Return(slotNumber, builder);
}
}
}