in src/log4net/Appender/AnsiColorTerminalAppender.cs [243:296]
protected override void Append(LoggingEvent loggingEvent)
{
string loggingMessage = RenderLoggingEvent(loggingEvent.EnsureNotNull());
// see if there is a specified lookup.
if (_levelMapping.Lookup(loggingEvent.Level) is LevelColors levelColors)
{
// Prepend the Ansi Color code
loggingMessage = levelColors.CombinedColor + loggingMessage;
}
// on most terminals there are weird effects if we don't clear the background color
// before the new line. This checks to see if it ends with a newline, and if
// so, inserts the clear codes before the newline, otherwise the clear codes
// are inserted afterward.
if (loggingMessage.Length > 1)
{
if (loggingMessage.EndsWith("\r\n") || loggingMessage.EndsWith("\n\r"))
{
loggingMessage = loggingMessage.Insert(loggingMessage.Length - 2, PostEventCodes);
}
else if (loggingMessage.EndsWith("\n") || loggingMessage.EndsWith("\r"))
{
loggingMessage = loggingMessage.Insert(loggingMessage.Length - 1, PostEventCodes);
}
else
{
loggingMessage += PostEventCodes;
}
}
else
{
if (loggingMessage[0] is '\n' or '\r')
{
loggingMessage = PostEventCodes + loggingMessage;
}
else
{
loggingMessage += PostEventCodes;
}
}
if (_writeToErrorStream)
{
// Write to the error stream
Console.Error.Write(loggingMessage);
}
else
{
// Write to the output stream
Console.Write(loggingMessage);
}
}